質問編集履歴

2 マークダウン

mamesuke

mamesuke score 5

2019/12/08 21:06  投稿

bupythonでのMySQLの保存が出来ない
```ここに言語を入力
コード
```現在、pythonのスクレイピングを学習中です。
現在、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  
import MySQLdb
conn = MySQLdb.connect(db='scraping', user='scraper', passwd='password', charset='utf8mb4')
c = conn.cursor()
c.execute('DROP TABLE IF EXISTS cities')
c.execute('''
   CREATE TABLE cities (
       rank integer,
       city text,
       population integer
   )
''')
c.execute('INSERT INTO cities VALUES (%s, %s, %s)', (1, '上海', 24150000))
c.execute('INSERT INTO cities VALUES (%(rank)s, %(city)s, %(population)s)',
         {'rank': 2, 'city': 'カラチ', 'population': 23500000})
         
c.executemany('INSERT INTO cities VALUES (%(rank)s, %(city)s, %(population)s)', [
   {'rank': 3, 'city': '北京', 'population': 21516000},
   {'rank': 4, 'city': '天津', 'population': 14722100},
   {'rank': 5, 'city': 'イスタンブル', 'population': 14160467},
])
conn.commit()
c.execute('SELECT * FROM cities')
for row in c.fetchall():
   print(row)
   
conn.close()
```
いろいろとググったのですが、答えが出ませんでした。
お詳しい方がいらしたら、教えて頂けるとありがたいです。
  • Python

    29177 questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1 マークダウン

mamesuke

mamesuke score 5

2019/12/08 20:59  投稿

pythonでのMySQLの保存が出来ない
bupythonでのMySQLの保存が出来ない
現在、pythonのスクレイピングを学習中です。
```ここに言語を入力
コード
```現在、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'
〈プログラムの内容はこれです〉
import MySQLdb
conn = MySQLdb.connect(db='scraping', user='scraper', passwd='password', charset='utf8mb4')
c = conn.cursor()
c.execute('DROP TABLE IF EXISTS cities')
c.execute('''
   CREATE TABLE cities (
       rank integer,
       city text,
       population integer
   )
''')
c.execute('INSERT INTO cities VALUES (%s, %s, %s)', (1, '上海', 24150000))
c.execute('INSERT INTO cities VALUES (%(rank)s, %(city)s, %(population)s)',
         {'rank': 2, 'city': 'カラチ', 'population': 23500000})
         
c.executemany('INSERT INTO cities VALUES (%(rank)s, %(city)s, %(population)s)', [
   {'rank': 3, 'city': '北京', 'population': 21516000},
   {'rank': 4, 'city': '天津', 'population': 14722100},
   {'rank': 5, 'city': 'イスタンブル', 'population': 14160467},
])
conn.commit()
c.execute('SELECT * FROM cities')
for row in c.fetchall():
   print(row)
   
conn.close()
いろいろとググったのですが、答えが出ませんでした。
お詳しい方がいらしたら、教えて頂けるとありがたいです。
  • Python

    29177 questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る