現在、pythonのスクレイピングを学習中です。
mysqlclientを使ってデータベースに内容を挿入しようとしているのですが、以下のエラーが出てしまい、調べても正解にたどりつきません。
Traceback (most recent call last):
File "/home/vagrant/scraping/lib/python3.4/site-packages/MySQLdb/cursors.py", line 204, in execute
query = query % args
TypeError: unsupported operand type(s) for %: 'bytes' and 'tuple'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "save_mysql.py", line 16, in <module>
c.execute('INSERT INTO cities VALUES (%s, %s, %s)', (1, '上海', 24150000))
File "/home/vagrant/scraping/lib/python3.4/site-packages/MySQLdb/cursors.py", line 206, in execute
raise ProgrammingError(str(m))
MySQLdb._exceptions.ProgrammingError: unsupported operand type(s) for %: 'bytes' and 'tuple'
〈プログラムの内容はこれです〉
python
1 2import MySQLdb 3 4conn = MySQLdb.connect(db='scraping', user='scraper', passwd='password', charset='utf8mb4') 5 6c = conn.cursor() 7c.execute('DROP TABLE IF EXISTS cities') 8 9c.execute(''' 10 CREATE TABLE cities ( 11 rank integer, 12 city text, 13 population integer 14 ) 15''') 16 17c.execute('INSERT INTO cities VALUES (%s, %s, %s)', (1, '上海', 24150000)) 18 19c.execute('INSERT INTO cities VALUES (%(rank)s, %(city)s, %(population)s)', 20 {'rank': 2, 'city': 'カラチ', 'population': 23500000}) 21 22c.executemany('INSERT INTO cities VALUES (%(rank)s, %(city)s, %(population)s)', [ 23 {'rank': 3, 'city': '北京', 'population': 21516000}, 24 {'rank': 4, 'city': '天津', 'population': 14722100}, 25 {'rank': 5, 'city': 'イスタンブル', 'population': 14160467}, 26]) 27 28conn.commit() 29 30c.execute('SELECT * FROM cities') 31for row in c.fetchall(): 32 print(row) 33 34conn.close()
いろいろとググったのですが、答えが出ませんでした。
お詳しい方がいらしたら、教えて頂けるとありがたいです。
あなたの回答
tips
プレビュー