python sqlite查询选择用多个零填充的文本

问题描述

我无法选择前面用零填充的 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()

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...