gla*_*con 5 python sqlite prepared-statement named-parameters
当在 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 方法以不将引号括起来的方式解释提供的参数吗?
我编写了一个小测试程序来充分探索这一点,因此它的价值在于:
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()
有兴趣听到无论如何操纵执行方法以允许它工作。
| 归档时间: | 
 | 
| 查看次数: | 1804 次 | 
| 最近记录: |