Frage

I have a python dict like this:

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

I want to insert keys and values of dictionary my_dict in two different columns of a mysql table. The columns names are term and urls respectively. I have three columns for now: id, term, urls and I want to insert each keys and values pairs in different rows.

I want to store the links in urls as seperated by commas. The website links in the values of my_dict must be stored seperated by commas like http://time.com, http://mine.com. I tried to insert in the following manner

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

But it shows the following error:

(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")
War es hilfreich?

Lösung

Your values in this instance are lists which you are attempting to pass to the SQL query and that is causing you issues.

If you want a separate record for each url in the values section (assuming you are going to always have a list for the values portion)

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

Or if you want to store the urls together in one record, you would need to pickle the list or convert to a format like json. Would require you to handle the data appropriately when pulling the data out from the database

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

To store the urls in comma separated format instead;

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))
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top