当在 SQLite 中使用带有命名参数的准备好的语句时(特别是使用 python sqlite3 模块 http://docs.python.org/library/sqlite3.html )是否有包含字符串值而不用引号引起来?
我有这个:
columnName = '''C1'''
cur = cur.execute('''SELECT DISTINCT(:colName) FROM T1''', {'colName': columnName})
看来我最终得到的 SQL 是这样的:
SELECT DISTINCT('C1') FROM T1
当然这没什么用,我真正想要的是:
SELECT DISTINCT(C1) FROM T1 .
有什么方法可以提示 execute 方法以不将引号括起来的方式解释提供的参数?
我已经编写了一个小测试程序来全面探索它,所以它的值(value)在于:
import sys
import sqlite3
def getDatabaseConnection():
DEFAULTDBPATH = ':memory:'
conn = sqlite3.connect(DEFAULTDBPATH, detect_types=sqlite3.PARSE_DECLTYPES|sqlite3.PARSE_COLNAMES)
conn.text_factory = str
return conn
def initializeDBTables(conn):
conn.execute('''
CREATE TABLE T1(
id INTEGER PRIMARY KEY AUTOINCREMENT,
C1 STRING);''')
cur = conn.cursor()
cur.row_factory = sqlite3.Row # fields by name
for v in ['A','A','A','B','B','C']:
cur.execute('''INSERT INTO T1 values (NULL, ?)''', v)
columnName = '''C1'''
cur = cur.execute('''SELECT DISTINCT(:colName) FROM T1''', {'colName': columnName})
#Should end up with three output rows, in
#fact we end up with one
for row in cur:
print row
def main():
conn = getDatabaseConnection()
initializeDBTables(conn)
if __name__ == '__main__':
main()
有兴趣了解如何操纵 execute 方法使其正常工作。
最佳答案
在 SELECT DISTINCT(C1) FROM T1
中,C1
不是字符串值,它是一段 SQL 代码。参数(在 execute
中转义)用于插入值,而不是代码片段。
关于python - sqlite/python - 不带引号的命名参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4191438/