首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用字典插入到SQLite3中

无法使用字典插入到SQLite3中
EN

Stack Overflow用户
提问于 2015-12-09 17:10:12
回答 1查看 107关注 0票数 1

我正在尝试创建一个函数,该函数使用dictionarySQLite3数据库中插入一行。

我在这里找到了一种这样做的方法,但不幸的是它不起作用。有一些问题我搞不清楚。

代码语言:javascript
复制
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()

例外:

代码语言:javascript
复制
self.cur.execute(query, new_data)
sqlite3.ProgrammingError: You did not supply a value for binding 1.

当我打印querynew_data时,一切似乎都是正确的:

代码语言:javascript
复制
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'}

编辑:所以我试着从查询中删除':‘,这样看起来就像:

代码语言:javascript
复制
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: no such column: Obchodné_meno

我不知道问题出在哪里,会不会是编码方面的问题?

EN

回答 1

Stack Overflow用户

发布于 2015-12-09 17:33:42

您在创建表时调用了encode('utf-8'),但在插入时没有调用。

Python确实使用了UTF8,但是sqlite3模块会自动处理与SQLite内部Unicode字符串编码之间的转换。不要试图手动重新编码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34174709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档