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

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

新規登録して質問してみよう
ただいま回答率
85.48%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

1回答

2974閲覧

MySQLdbでテーブルがうまく作れない

I_dont_know

総合スコア16

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2019/08/26 03:59

pythonを用いたスクレイピングの本を読みながら写経しているのですが、テーブル作成の構文エラーが出て動きません。教科書通りに書いたのですが何がいけないのかさっぱりわかりませんので教えていただけると幸いです。
citiesテーブルを作成するところでMySQLdb._exceptions.ProgrammingError: (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 'rank integer,\n city TEXT,\n population integer\n )' at line 2")というエラーが出てしまいます。

python3

1import MySQLdb 2 3# MySqlサーバに接続し、コネクションを取得する 4# ユーザ名とパスワードを指定してscrapingデータベースを使用する。接続に使用する文字コードはutf8mb4とする 5conn = MySQLdb.connect(db='scraping', user='scraper', passwd='password', charset='utf8mb4') 6 7c = conn.cursor() # カーソルを取得する 8# execute()メソッドでSQL文を実行する 9# このスクリプトを何回実行しても同じ結果になるようにするため、citiesテーブルが存在する場合は削除する 10c.execute('DROP TABLE IF EXISTS cities') 11# citiesテーブルを作成する 12c.execute(''' 13 CREATE TABLE cities ( 14 rank integer, 15 city TEXT, 16 population integer 17 ) 18''') 19# execute()メソッドの第2引数にはSQL文のパラメーターを指定できる 20# パラメーターで置き換える場所(プレースホルダー)は%sで指定する 21c.execute('INSERT INTO cities VALUES (%s, %s, %s)', (1, '上海', 24150000)) 22 23# パラメーターが辞書の場合、プレースホルダーは%(名前)sで指定する 24c.execute('INSERT INTO cities VALUES (%(rank)s, %(city)s, $(population)s)', 25 {'rank': 2, 'city': 'カラチ', 'population': 23500000}) 26 27# executemany()メソッドでは、複数のパラメーターをリストで指定し、複数のSQL文(ここでは3つ)を実行する 28c.executemany('INSERT INTO cities VALUES (%(rank)s, %(city)s, %(population)s)', [ 29 {'rank': 3, 'city': '北京', 'population': 21516000}, 30 {'rank': 4, 'city': '天津', 'population': 14722100}, 31 {'rank': 5, 'city': 'イスタンブル', 'population': 14160467}, 32]) 33 34c.execute('SELECT * FROM cities') # 保存したデータを保存する 35for row in c.fetchall(): # クエリの結果はfetchall()メソッドで取得できる 36 print(row) # 取得したデータを表示する 37 38conn.close() # コネクションを閉じる 39

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

MySQL 8.xから rankという文字は、予約語になりましたので、
CREATE TABLEの文で
rankをバッククォートで囲めばよいかと思います。

rank → ``` rank

投稿2019/08/26 05:45

MAKOTO_MOBY

総合スコア193

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

I_dont_know

2019/08/26 13:19

テーブルの作成は上手くいきました!ありがとうございます! 追加で質問してしまいすみません。テーブル作成後の辞書で追加する際にこのようなエラーが出たのですがこの場合も予約語のrankが絡んでいたりしますか? Traceback (most recent call last): File "/Users/ユーザ名/Documents/scraping/sourcecode/save_mysql.py", line 25, in <module> {'rank': 2, 'city': 'カラチ', 'population': 23500000}) File "/Users/ユーザ名/Documents/scraping/venv/lib/python3.6/site-packages/MySQLdb/cursors.py", line 209, in execute res = self._query(query) File "/Users/ユーザ名/Documents/scraping/venv/lib/python3.6/site-packages/MySQLdb/cursors.py", line 315, in _query db.query(q) File "/Users/ユーザ名/Documents/scraping/venv/lib/python3.6/site-packages/MySQLdb/connections.py", line 226, in query _mysql.connection.query(self, query) MySQLdb._exceptions.ProgrammingError: (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 's)' at line 1") そうであればどのように対処すればいいか教えていただけると幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問