繁体   English   中英

简单的Select查询中的Python sqlite3 OperationalError

[英]Python sqlite3 OperationalError in a simple Select query

我在sqlite(python sqlite3)中使用非常简单的查询有一个奇怪的行为

这是一个有效的查询

cursor = self.con.cursor()
cursor.execute("SELECT * FROM vpro1 ORDER BY :orderby DESC LIMIT 1", {"table": "vpro1", "orderby": self.unit_timestamp})

但是这个丢给我一个错误

cursor = self.con.cursor()
cursor.execute("SELECT * FROM :table ORDER BY :orderby DESC LIMIT 1", {"table": "vpro1", "orderby": self.unit_timestamp})

例外是

sqlite3.OperationalError: near ":table": syntax error

因此,当我尝试使用qmark作为表名时,会引发错误,如果我在查询中对其进行硬编码,则它会起作用,:orderby可以在我使用的任何东西上使用(qmark,硬编码,命名)... qmark样式的相同行为( ?,?和一个元组)

谢谢你的建议 !

您不能使用DB API来完成表名。 我不确定这是什么原因,但过去我曾遇到过同样的问题。 它在SQLite或MySQL以及其他可能的版本中不起作用。

解决方法,请参阅Donald Miner对另一个问题的回答。

def scrub(table_name):
    return ''.join( chr for chr in table_name if chr.isalnum() )

scrub('); drop tables --')  # returns 'droptables'

然后将此作为格式字符串传递。

table = "vpro1"
cursor.execute("SELECT * FROM {0} ORDER BY :orderby DESC LIMIT 1".format(scrub(table)), {"orderby": self.unit_timestamp})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM