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