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

时间:2017-08-19 22:44:49

标签: python json sqlite insert-into executemany

我正在尝试使用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文件的顺序是“姓名,电话,地址”或其他顺序。我需要能够将我的keysTuple输入到命令的INSERT部分,这样无论JSON文件的顺序如何,我都可以保持我的关系,而不必完全重建listOfTuples。我知道必须有一种方法,但我所写的内容与INSERT部分的正确语法不匹配。 VALUES行工作正常,它使用listofTuples中的每个元素。

很抱歉,如果我没有问正确的问题。 FNG在这里,这是我的第一篇文章。我看了整个网络,但它只产生使用的例子?在VALUE部分,永远不会在INSERT INTO部分。

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:-1)

试试这个

示例,如果您的表命名产品包含以下字段:

Prod_Name Char(30) UOM Char(10) 参考字符(10) Const Float 价格浮动

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