问题描述
我无法选择前面用零填充的 TEXT 数据类型。
发现我的数据库有问题。
我的多次尝试和同行的所有答案都应该有效。
感谢@snakecharmerb 和@forpas 指出数据库中可能存在的缺陷。
例如代码列包含
000001,000010,000300 ...
也有多个数据相同的代码。
code date
000030 20210101
000030 20210102
000030 20210103
000030 20210104
000030 20210105
...
我需要遍历一个列表,所以我尝试了多种使用 f-string 的方法,但没有奏效。
con = sqlite3.connect("DIRECTORY")
cur = con.cursor()
code = '000030' // does not work
code = 000030 // forbidden by python 3.7
query = cur.execute(f"SELECT * From TABLE where code is {code}") // should work
query = cur.execute(f"SELECT * From TABLE where code is '{code}'") // should work
query = cur.execute(f'SELECT * From TABLE where code is "{code}"') // should work
query = cur.execute('SELECT * From TABLE where code = ?',('000030',)) // should work
query = cur.execute("SELECT * From TABLE where code is 000030") // works but cannot loop through a list
还尝试将 'is' 替换为 '=','=='。一切都应该有效。
解决方法
无论 code
列的数据类型是什么,此查询都应该有效:
query = cur.execute("SELECT * From TABLE where code = ?",("000030",))
尝试将列值和传递的参数隐式转换为整数:
query = cur.execute("SELECT * From TABLE where code + 0 = ? + 0",))
如果这不起作用,则意味着 code
列的值与您在问题中发布的值不同。
这是一个工作示例:
new VLC().RadioStream()
输出
import sqlite3
conn = sqlite3.connect(':memory:')
cur = conn.cursor()
cur.execute("""CREATE TABLE test (code TEXT)""")
for i in range(0,100,10):
cur.execute("""INSERT INTO test (code) VALUES (?)""",(str(i).zfill(5),))
conn.commit()
cur.execute("""SELECT * FROM test""")
for row in cur:
print(row)
print()
cur.execute("""SELECT code FROM test WHERE code = ?""",('00030',))
for row in cur:
print(row)
print()
conn.close()