2015-12-09 76 views
0

我想插入從下面的字典數據庫的結果(我使用PostgreSQL):存儲字典數據庫的使用Python(PostgreSQL的)結果

companies_list = dict(zip(code, short_name)) 

結果本字典

companies_list = { '00001': 'A', '00002': 'B', '0010': 'Z'} 

所以當我試圖插入字典上面到數據庫(代碼)所示::

con = None 
con = psycopg2.connect("dbname = 'testdb' user='user'") 
cur = con.cursor() 

cur.execute("CREATE TABLE companies_info(code TEXT PRIMARY KEY, short_name TEXT)") 


query = "INSERT INTO companies_info (code, short_name) VALUES (%(code)s, %(short_name)s)" 
cur.executemany(query, companies_list) 

con.commit() 
con.close() 
運行代碼和印刷將顯示以下(作爲一個例子)後

我得到如下:

cur.executemany(query, companies_list) 
TypeError: string indices must be integers, not str 

任何人都可以解決他的錯誤?

+1

你不需要這樣做,postgres現在支持json。如果你在最新的postgres ... http://initd.org/psycopg/docs/extras.html#json-adaptation –

+0

我剛開始與postgresql和掙扎着,我試着以下:'詛咒。執行(「insert into companies_info(jsondata)values(%s)」, [Json(companies_list)])'....並且它給了ne錯誤的錯誤:'NameError:全局名'Json'沒有定義'bear我剛剛開始使用數據庫。通過自學。 –

+0

我想你從這裏'從psycopg.extras import Json'得到它 - 但我無法測試它..我不知道。有人在這裏糾正我! –

回答

0
code = ['00001', '00002', '0010'] 
short_name = ['A', 'B', 'Z'] 
companies_list = [tuple((t,)) for t in zip(code, short_name)] 
query = "insert into companies_info (code, short_name) values %s" 
cursor.executemany(query, companies_list) 
+0

我累了它,並得到了fllowing錯誤: 'TypeError:並非所有參數在字符串格式轉換' 我不知道這是否相關但(code,short_name) : 'short_name = tree.xpath('// table [@class =「Table3」] // td [3]/text()') code = tree.xpath('// table [@class =「Table3 「] // td [1]/text()')' –

+0

@TM已更新並測試 –

+0

感謝它的魅力,但你能爲我解釋這條線,以便理解它..'tuple((t ,))for zip in(code,short_name)]'..我總是對如何解決問題感興趣。欣賞它。 –