2012-09-06 45 views
0

我有一个Python字典这样的插入在MySQL中键和python字典的值:如何使用python

my_dict = {'find': ['http://time.com', 'http://find.com'], 'time': ['http://any.com', 'http://www.tim.com', 'http://mine.in']...} 

我想在一个MySQL表的两个不同列中插入字典my_dictkeysvalues 。列名分别是termurls。我现在有三列:id,term,urls我想插入每个键和值对不同的行。

我想用逗号分开存储链接urls。在my_dict值的网站链接必须通过像http://time.com, http://mine.com. 逗号存储分隔我试着用以下方式

for i in my_dict.items(): 
    keys = i[0] 
    values = i[1] 
    sql = """INSERT INTO index_table (term, urls) VALUES (%s, %s)""" 
    cursor.execute(sql, (keys, values)) 

插入,但它显示了以下错误:

(1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '))' at line 1") 
+0

你是否检查过你正在生产的SQL是你期望的? – Hamish

+0

为什么你不想使用某种ORM工具包?例如'sqlalchemy'。 –

回答

1

你在这个值实例是您尝试传递给SQL查询的列表,这会导致您遇到问题。

如果你想在值部分中的每个网址都单独记录(假设你将始终拥有价值部分的列表)

for i in my_dict.items(): 
    term = i[0] 
    for url in i[1]: 
     sql = """INSERT INTO index_table (term, urls) VALUES (%s, %s)""" 
     cursor.execute(sql, (term, url)) 

或者,如果你想存储的网址放在一个记录,您需要腌制列表或将其转换为像json这样的格式。需要从数据库

import json 
for i in my_dict.items(): 
    term = i[0] 
    urls = json.dumps(i[1]) 
    sql = """INSERT INTO index_table (term, urls) VALUES (%s, %s)""" 
    cursor.execute(sql, (term, urls)) 

拉低数据时执行以存储在代替逗号分隔格式的URL适当地处理数据;

for i in my_dict.items(): 
    term = i[0] 
    urls = ', '.join(i[1]) 
    sql = """INSERT INTO index_table (term, urls) VALUES (%s, %s)""" 
    cursor.execute(sql, (term, urls)) 
+0

哦,不,我很抱歉,我想以逗号分隔的网址存储链接,意味着我要删除广场和双引号, –

+0

只是更新了显示存储以逗号分隔的网址的答案 – Reinbach