gpt4 book ai didi

python - sqlite/python - 不带引号的命名参数?

转载 作者:太空宇宙 更新时间:2023-11-03 11:10:49 27 4
gpt4 key购买 nike

当在 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com