0

私はこのようなPythonの口述を持っています:

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

mysqlテーブルの2つの異なる列に辞書を挿入keysしたいと思います。列名はそれぞれとです。今のところ3つの列があります:、、および各キーと値のペアを異なる行に挿入します。valuesmy_dicttermurlsidtermurls

urlsリンクをコンマで区切って保存したい。my_dictの値のWebサイトのリンクは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を1つのレコードにまとめて保存する場合は、リストをピクルスにするか、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))
于 2012-09-06T08:18:35.690 に答える