0

我有一个像这样的python dict:

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

我想在 mysql 表的两个不同列中插入keysvalues字典。my_dict列名分别是termurls。我现在有三列:id, termurls并且我想在不同的行中插入每个键和值对。

我想以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")
4

1 回答 1

1

在这种情况下,您的值是您尝试传递给 SQL 查询的列表,这会导致您出现问题。

如果您想为值部分中的每个 url 单独记录(假设您总是有一个值部分的列表)

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))

或者,如果您想将 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))

改为以逗号分隔格式存储网址;

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))
于 2012-09-06T08:18:35.690 回答