gpt4 book ai didi

python - SQLite:为什么不能使用参数来设置标识符?

转载 作者:太空宇宙 更新时间:2023-11-04 01:00:39 24 4
gpt4 key购买 nike

我正在重构一点 side project使用 SQLite 而不是 Python 数据结构,这样我就可以学习 SQLite。我一直使用的数据结构是一个字典列表,其中每个字典的键代表一个菜单项的属性。最终,这些键应该成为 SQLite 表中的列。

我首先想到我可以通过创建单列表、遍历字典键列表并执行 ALTER TABLEADD COLUMN 来以编程方式创建表> 像这样命令:

# Various import statements and initializations

conn = sqlite3.connect(database_filename)
cursor = conn.cursor()
cursor.execute("CREATE TABLE menu_items (item_id text)")

# Here's the problem:
cursor.executemany("ALTER TABLE menu_items ADD COLUMN ? ?", [(key, type(value)) for key, value in menu_data[0].iteritems()])

经过更多阅读,我意识到参数不能用于标识符,只能用于文字值。 PyMOTW on sqlite3

Query parameters can be used with select, insert, and update statements. They can appear in any part of the query where a literal value is legal.

Kreibich 在第 1 页上说。 135 篇使用 SQLite(ISBN 9780596521189):

Note, however, that parameters can only be used to replace literal values, such as quoted strings or numeric values. Parameters cannot be used in place of identifiers, such as table names or column names. The following bit of SQL is invalid:

SELECT * FROM ?; -- INCORRECT: Cannot use a parameter as an identifier

我接受位置参数或命名参数不能以这种方式使用。他们为什么不能?我是否遗漏了一些一般原则?

类似的问题:

最佳答案

标识符在语法上是重要的,而变量值则不是。

在 SQL 编译阶段需要知道标识符,以便编译后的内部字节码表示了解相关的表、列、索引等。仅更改 SQL 中的一个标识符可能会导致语法错误,或者至少是一种完全不同的字节码程序。

文字值可以在运行时绑定(bind)。变量在已编译 SQL 程序中的行为本质上是相同的,而不管它们中绑定(bind)的值如何。

关于python - SQLite:为什么不能使用参数来设置标识符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33019599/

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