Python-sqlite参数扩展问题

2024-10-04 05:28:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含三列的表,celltrx和{}。 这是我要运行的查询:

db.execute("SELECT cell,trx FROM tchdrop").fetchall()

它给出正确的输出。在

但是当我尝试a = ("cell", "trx")然后

^{pr2}$

输出是[(u'cell', u'trx'), (u'cell', u'trx')](这是错误的)

我这样做是为了弄清楚如何动态地提取列,这是一个更大问题的一部分。在


Tags: fromexecutedb错误动态cellselecttrx
2条回答

占位符(?)python DB-API(如sqlite3)不支持传递列名,因此必须使用如下python字符串格式:

a = ("cell", "trx")

query = "SELECT {0},{1} FROM tchdrop".format(*a)
db.execute(query)

编辑:

如果不知道要传递的列的长度,可以执行以下操作:

^{pr2}$

该库将指定的值("cell", "trx")替换为它们的等效引用SQL,因此您得到的是SELECT "cell", "trx" FROM tchdrop。结果是正确的。在

使用?语法是不可能实现的。相反,您可以自己替换字符串。您可以使用正则表达式(如^[a-zA-Z_]$)检查列名以获得更高的安全性。在

例如:

columns = ",".join(("cell", "trx"))
db.execute("SELECT %s FROM tchdrop" % columns).fetchall()

相关问题 更多 >