por*_*uod 15 python sql sqlite pysqlite
使用pysqlite我正在制作一个程序来处理某些数据.同样种类的操作是在多个表和列类似领域完成的,所以我想我可以参数化的SQL语句,如下所示:
def foo():
column = 'c'
table = 't'
row = 1
# preferred approach, gives syntax error
c.execute('SELECT ? FROM ? WHERE id=?', (column, table, row))
# sanity check, works fine
c.execute('SELECT c FROM t WHERE id=?', (row))
# workaround, also works, but is this the right way?
c.execute('SELECT % FROM % WHERE id=?' % (column, table), row))
Run Code Online (Sandbox Code Playgroud)
我得到的错误是不是非常有帮助(sqlite3.OperationalError: near "?": syntax error
),但我得到了这一点:在以这种方式使用的占位符Pysqlite并不领情.
谁能指出这里发生了什么以及正确的做法?
unu*_*tbu 18
您根本无法使用占位符作为列名或表名.我没有这方面的权威性引用 - 我只是通过尝试和失败来"知道"这一点.但它有一定道理:
execute
在获取之前准备(-ing)SQL语句的目的很小,因为可以替换语句的所有部分.简而言之,您找到了正确的方法 - 使用字符串格式化.
c.execute('SELECT {} FROM {} WHERE id=?'.format(column, table), row))
Run Code Online (Sandbox Code Playgroud)
1并非所有驱动程序都引用参数 - oursql
不是,因为它将SQL和参数分别发送到服务器.
归档时间: |
|
查看次数: |
4053 次 |
最近记录: |