使用 ?在 Python 中的 executemany() 的 INSERT INTO 中使用 Sqlite

Using ? within INSERT INTO of a executemany() in Python with Sqlite

我正在尝试使用 executemany() 通过 python 将数据提交到 Sqlite 数据库。我正在从 JSON 文件中读取数据,然后将其放入数据库中。我的问题是 JSON 创建不在我的控制之下,并且取决于我从谁那里获取文件,值的顺序每次都不相同。键是正确的,因此它们与数据库中的键相关联,但我不能只是在 executemany() 函数中抛出值,并且每次都将数据显示在正确的列中。

这是我需要做的事情。

keyTuple = (name, address, telephone)

listOfTuples = [(name1, address1, telephone1),
                (name2, address2, telephone2),
                (...)]

cur.executemany("INSERT INTO myTable(?,?,?)", keysTuple"
                "VALUES(?,?,?)", listOfTuples)

我遇到的问题是某些 JSON 文件的顺序为 "name, telephone, address" 或其他顺序。我需要能够将我的 keysTuple 输入到命令的 INSERT 部分,这样无论 JSON 文件以何种顺序进入,我都可以保持关系正常,而不必完全重建 listOfTuples。我知道一定有办法,但我写的内容与 INSERT 部分的正确语法不匹配。 VALUES 行工作得很好,它使用 listofTuples 中的每个元素。

对不起,如果我问的用词不正确。 FNG 在这里,这是我的第一个 post。我浏览了整个网络,但它只产生了使用的例子?在 VALUE 部分,从不在 INSERT INTO 部分。

试试这个

示例,如果您有 table 个具有以下字段的命名产品:

Prod_Name 字符( 30 ) UOM 字符( 10 ) 参考字符 ( 10 ) 常量浮点数 价格浮动

list_products = [('Garlic', '5 克', 'Can', 1.10, 2.00), ('Beans', '8 On.', 'Bag', 1.25, 2.25), ('Apples', '1 Un.', 'Unit', 0.25, 0.30), ] c.executemany('Insert Into products Values (?,?,?,?,?)', list_products )

您不能为 table/column 个名称使用 SQL 个参数 (?)。

但是当您已经有了正确顺序的列名时,您可以简单地连接它们以便能够将它们插入到 SQL 命令字符串中:

>>> keyTuple = ("name", "address", "telephone")
>>> "INSERT INTO MyTable(" +  ",".join(keyTuple) + ")"
'INSERT INTO MyTable(name,address,telephone)'