2017-08-10 8 views
0

MySQLdbドライバを使ってmysqlデータベースにリストを挿入する際に問題が発生しました。データベース内のリストを挿入するMySQLdb Python3.6

import MySQLdb 

db = MySQLdb.connect("localhost", "user", "password", "db") 

c = db.cursor() 
cities = ["New York", "NY", 8400000] 

sql = "INSERT INTO projecten.population(city, state, population) VALUES(?, ?, ?)", cities 

try: 
    c.execute(sql) 
    db.commit() 
except MySQLdb.OperationalError: 
    print("error") 
finally: 
    db.close() 

これはエラー

TypeError: a bytes-like object is required, not 'tuple' 

答えて

0

私は答え

c.executemany("INSERT INTO projecten.population(city, state, population) VALUES(%s, %s, %s)", (cities)) 
0

あなたはタプルで、文字列フォーマッタを使用したいと思うかもしれませある -

>>> sql = "INSERT INTO projecten.population(city, state, population) VALUES('%s', '%s', '%s')" % tuple(cities) 
>>> sql 
"INSERT INTO projecten.population(city, state, population) VALUES('New York', 'NY', '8400000')" 
+0

を得たが、%を使用すると、SQLインジェクション –

+0

有効なポイントと安全ではありません。 cur.execute( "INSERT INTO projecten.population(city、state、population)VALUES(%s、%s、%s)"、(cities、)を参照してください)http://mysql-python.sourceforgeを参照してください。 net/MySQLdb.html#some-examples – Rishi

+0

変数に1つの値が含まれている場合にのみ、(cities、)を使用できます。変数に複数の値が含まれている場合は、(都市)を使用します。 –

0

SQL文が正しく値を渡す必要があります。

import MySQLdb 
db = MySQLdb.connect("localhost", "user", "password", "db") 
c = db.cursor() 
cities = ["New York", "NY", 8400000] 
sql = "INSERT INTO projecten.population(city, state, population) VALUES({0}, {1}, {2})".format(*cities) 
try: 
    c.execute(sql) 
    db.commit() 
except MySQLdb.OperationalError: 
    print("error") 
finally: 
    db.close() 
関連する問題