Python Can';t使用字典插入SQLite3
我正在尝试使用Python Can';t使用字典插入SQLite3,python,dictionary,sqlite,Python,Dictionary,Sqlite,我正在尝试使用字典创建一个函数,在SQLite3数据库中插入一行 我在这里找到了这样一种方法,但不幸的是,它不起作用。有个问题我想不出来 def insert_into_table(self,data): for key in data.keys(): # ADDING COLUMNS IF NECESSARY columns = self.get_column_names() column = key.replace(' ','_')
字典
创建一个函数,在SQLite3
数据库中插入一行
我在这里找到了这样一种方法,但不幸的是,它不起作用。有个问题我想不出来
def insert_into_table(self,data):
for key in data.keys(): # ADDING COLUMNS IF NECESSARY
columns = self.get_column_names()
column = key.replace(' ','_')
if column not in columns:
self.cur.execute("""ALTER TABLE vsetkyfirmy ADD COLUMN {} TEXT""".format(column.encode('utf-8')))
self.conn.commit()
new_data={}
for v,k in data.iteritems(): # new dictionary with remaden names (*column = key.replace(' ','_'))
new_data[self.remake_name(v)]=k
columns = ', '.join(new_data.keys())
placeholders = ':'+', :'.join(new_data.keys())
query = 'INSERT INTO vsetkyfirmy (%s) VALUES (%s)' % (columns, placeholders)
self.cur.execute(query, new_data)
self.conn.commit()
例外情况:
self.cur.execute(query, new_data)
sqlite3.ProgrammingError: You did not supply a value for binding 1.
当我打印query
和new\u data
时,一切似乎都是正确的:
INSERT INTO vsetkyfirmy (Obchodné_meno, IČ_DPH, Sídlo, PSČ, Spoločník, IČO, Základné_imanie, Konateľ, Ročný_obrat, Dátum_vzniku, Právna_forma) VALUES (:Obchodné_meno, :IČ_DPH, :Sídlo, :PSČ, :Spoločník, :IČO, :Základné_imanie, :Konateľ, :Ročný_obrat, :Dátum_vzniku, :Právna_forma)
{u'Obchodn\xe9_meno': 'PRspol. s r.o.', u'I\u010c_DPH': 'S9540', u'S\xeddlo': u'Bansk\xe1 Bystrica, Orembursk\xe1 2', u'PS\u010c': '97401', u'Spolo\u010dn\xedk': u'Dana Dzurianikov\xe1', u'I\u010cO': '3067', u'Z\xe1kladn\xe9_imanie': u'142899 \u20ac', u'Konate\u013e': 'Miroslav Dz', u'Ro\u010dn\xfd_obrat': '2014: 482 EUR', u'D\xe1tum_vzniku': '01.12.1991 ', u'Pr\xe1vna_forma': u'Spolo\u010dnos\u0165 s ru\u010den\xedm obmedzen\xfdm'}
编辑:所以我尝试从查询中删除“:”,使其看起来像:
INSERT INTO vsetkyfirmy (Obchodné_meno, IČ_DPH, Sídlo, PSČ, Spoločník, IČO, Základné_imanie, Konateľ, Ročný_obrat, Dátum_vzniku, Právna_forma) VALUES (Obchodné_meno, IČ_DPH, Sídlo, PSČ, Spoločník, IČO, Základné_imanie, Konateľ, Ročný_obrat, Dátum_vzniku, Právna_forma)
它返回sqlite3.OperationalError:没有这样的列:Obchodné_meno
我不知道问题出在哪里,可能是编码方面的问题吗?您在创建表时调用的是
encode('utf-8')
,而不是在插入时调用的
SQLite确实使用UTF-8,但是
sqlite3
模块自动处理从Python内部Unicode字符串编码到Python内部Unicode字符串编码的转换。不要尝试手动重新编码。您在创建表时调用的是encode('utf-8')
,而不是在插入时
SQLite确实使用UTF-8,但是sqlite3
模块自动处理从Python内部Unicode字符串编码到Python内部Unicode字符串编码的转换。不要试图手动重新编码