Pythonを使用してjsonタイプのデータをMySQLデータベースに保存します
Use Python Store Json Type Data Into Mysql Database
0.説明
パーソナルプロジェクトで取得したデータはjson型であり、MySQLデータベースに保存する必要があるため、json型のデータは一般的なテキストデータとは異なり、MySQLに格納する際に注意すべき多くの問題があります。
私はインターネットでたくさんの方法を見つけ、より実用的で信頼できる方法を整理しました。要約は次のプロセスです。
MySQLテーブルは、jsonデータを格納するための列タイプがBLOBであることを確認する必要があります
sqlステートメントを使用する場合は、MySQLdb.excape_string関数を使用してjsonデータをエスケープします
データをクエリする場合、json.loadsを使用して結果を取得し、元のPythonデータ型を取得できます。
それを見てみましょう。実際、私のニーズでは、MySQLのPythonで辞書を保存する必要があるため、最初にjsonに変換することしかできません。
1.実際にjsonデータをMySQLに保存します
(1)データストレージ
1.jsonデータ型を格納できるデータベーステーブルを作成します
mysql> create table jsondata -> ( -> id int(6) auto_increment primary key, -> data blob(1024) -> ) Query OK, 0 rows affected (0.25 sec) mysql> show tables +-------------------+ | Tables_in_spyinux | +-------------------+ | jsondata | | test | +-------------------+ 2 rows in set (0.00 sec) mysql> describe jsondata +-------+--------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+--------+------+-----+---------+----------------+ | id | int(6) | NO | PRI | NULL | auto_increment | | data | blob | YES | | NULL | | +-------+--------+------+-----+---------+----------------+ 2 rows in set (0.00 sec)
2.Pythonを使用してjsonデータ型を生成します
>>> import json >>> d = {'name': 'xpleaf'} >>> type(d) >>> d_json = json.dumps(d) >>> d_json '{'name': 'xpleaf'}' >>> type(d_json)
3.MySQLdbを使用してMySQLデータベースに接続します
>>> import MySQLdb >>> conn = m.connect(host='localhost', port=3306, user='root', passwd='123456', db='spyinux')>>> cur = conn.cursor()
4.ネイティブSQLステートメントを記述します
>>> tsql = 'insert into jsondata(data) values('{json}')'
5.MySQLdbメソッドを使用してjsonデータをエスケープします
>>> sql = tsql.format(json=MySQLdb.escape_string(d_json)) >>> sql 'insert into jsondata(data) values('{\'name\': \'xpleaf\'}')'
6.SQLステートメントを実行します
>>> cur.execute(sql) 1L >>> cur.execute(sql) 1L
(2)データクエリ
上記の操作が完了すると、MySQLへのjsonのデータへのアクセスに成功しました。重要なのは、データを取得して、最終的にPythonの辞書タイプに復元できるかどうかです。
1.最初にMySQLに保存されているデータをクエリします。
mysql> select * from jsondata +----+--------------------+ | id | data | +----+--------------------+ | 1 | {'name': 'xpleaf'} | +----+--------------------+ 1 row in set (0.00 sec)
2.Pythonインタラクターでデータをクエリします
>>> cur.execute('select * from jsondata') 1L >>> mydata = cur.fetchall() >>> mydata ((1L, '{'name': 'xpleaf'}'),) >>> mydata = mydata[0][1] >>> mydata '{'name': 'xpleaf'}' >>> type(mydata)
3.json.loadsを使用してjsonデータを解析します
>>> mydata = json.loads(mydata) >>> mydata {u'name': u'xpleaf'} >>> type(mydata) >>> mydata['name'] u'xpleaf' >>> mydata.get('name') u'xpleaf'
ご覧のとおり、最初にPythonnを使用して辞書タイプのデータを作成し、次にそれをMySQLに簡単に保存できるようにjsonデータタイプに変換しました。このプロセスでは、MySQL.escape_stringメソッドを使用してjsonデータをエスケープする必要があります。最後にデータをクエリするときは、json.loadsメソッドを使用してjsonデータを解析し、最初に保存したPython辞書タイプのデータを取得します。
2.実際のアプリケーション
もちろん、Pythonの使用中に辞書やその他のデータ型のデータをMySQLに保存する必要がある場合は、それをjson型のデータに変換してから、上記の方法を使用するのは非常に簡単です。
転載:https://blog.51cto.com/xpleaf/1905368