質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.59%

bupythonでのMySQLの保存が出来ない

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 376

mamesuke

score 5

現在、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()

いろいろとググったのですが、答えが出ませんでした。
お詳しい方がいらしたら、教えて頂けるとありがたいです。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • hayataka2049

    2019/12/08 22:05

    import sys;print(sys.version)
    というコードを先頭に書き加えて実行するとどうなりますか?

    キャンセル

  • mamesuke

    2019/12/09 11:05

    ご回答ありがとうございます。
    コードに付け加えて実行してみましたが、前と同じ結果となっています。

    キャンセル

  • hayataka2049

    2019/12/09 12:10

    追加した行によるprintではどのような出力が出ましたか?

    キャンセル

  • mamesuke

    2019/12/09 14:09

    3.4.3 (default, Nov 12 2018, 22:25:49)
    [GCC 4.8.4]

    と出力され、後は同じように Traceback…… と出ています。

    キャンセル

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.59%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る