2015-12-09 68 views
1

我試圖做一個功能,插入一行到SQLite3數據庫使用dictionary不能插入到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. 

當我打印querynew_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: no such column: Obchodné_meno

我不知道問題在哪裏,它可以在編碼?

回答

0

您在創建表格時調用encode('utf-8'),但在插入時不能調用。

SQLite實際上使用UTF-8,但sqlite3模塊自動處理從Python的內部Unicode字符串編碼轉換。不要嘗試手動重新編碼。