1

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

这是我需要做的。

keyTuple = (name, address, telephone)

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

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

我遇到的问题是一些 JSON 文件的顺序是“姓名、电话、地址”或其他顺序。我需要能够将我的 keysTuple 输入到命令的 INSERT 部分,这样无论 JSON 文件以什么顺序进入,我都可以保持我的关系正常,而不必完全重建 listOfTuples。我知道必须有一种方法,但我所写的内容与 INSERT 部分的正确语法不匹配。VALUES 行工作得很好,它使用 listofTuples 中的每个元素。

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

4

2 回答 2

0

您不能将 SQL 参数 ( ?) 用于表/列名称。

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

>>> keyTuple = ("name", "address", "telephone")
>>> "INSERT INTO MyTable(" +  ",".join(keyTuple) + ")"
'INSERT INTO MyTable(name,address,telephone)'
于 2017-08-20T07:54:19.137 回答
-1

尝试这个

例如,如果您有名为 products 的表,其中包含以下字段:

Prod_Name Char(30) UOM Char(10) Reference Char(10) Const Float Price Float

list_products = [('Garlic', '5 Gr.', 'Can', 1.10, 2.00), ('Beans', '8 On.', 'Bag', 1.25, 2.25), ('Apples', '1 Un.', 'Unit', 0.25, 0.30), ] c.executemany('插入产品值 (?,?,?,?,?)', list_products )

于 2017-08-20T00:55:56.507 回答