プログラミング初心者です。
APIより取得したデータ(辞書)を、あらかじめ作成したPostgreSQLのテーブルに追加するコードを書きたいのですが、うまくいきません。
以下はPostgreSQLにて作成したテーブルです。(APIより取得するデータの型に合わせて作りました)
mydb=> \d bitflyer テーブル "public.bitflyer" 列 | 型 | 修飾語 -------------------+------------------+---------- best_ask_size | double precision | total_bid_depth | double precision | product_code | character(10) | ltp | double precision | best_bid_size | double precision | volume | double precision | tick_id | integer | volume_by_product | double precision | total_ask_depth | double precision | best_ask | double precision | timestamp | character(30) | not null best_bid | double precision | インデックス: "bitflyer_key" PRIMARY KEY, btree ("timestamp")
APIより取得したデータが以下です。変数aの中に辞書データが入っています。
P=Public() a=P.getticker() print(a) {'tick_id': 5643789, 'total_ask_depth': 1096.03971997, 'volume': 122179.34443855, 'product_code': 'BTC_JPY', 'best_bid_size': 0.81, 'total_bid_depth': 4499.00718145, 'volume_by_product': 12897.70069179, 'ltp': 528428.0, 'best_bid': 528290.0, 'best_ask': 528428.0, 'best_ask_size': 0.14722663, 'timestamp': '2017-09-01T09:53:57.133'}
PostgreSQLとの接続にはpsycopg2を使用しています。
#PostgreSQLに接続 import psycopg2 connection = psycopg2.connect("host=localhost port=5432 dbname=mydb user=username password=psw") cur = connection.cursor()
データ取得時、毎回、辞書データ内要素の順番がずれるため、辞書のキーを引数として渡したいと思っています。
ここでエラーが発生してしまいます。
#キーbest_ask_sizeを引数として渡す cur.execute("insert into bitflyer values(best_ask_size)") -------------------------------------------------- ProgrammingError Traceback (most recent call last) <ipython-input-7-3d83a90cb076> in <module>() ----> 1 cur.execute("insert into bitflyer values(best_ask_size)") ProgrammingError: 列"best_ask_size"は存在しません LINE 1: insert into bitflyer values(best_ask_size) ^
クォーテーションで囲みましたが、解決しませんでした。
#best_ask_sizeを''で囲む cur.execute("insert into bitflyer values('best_ask_size')") -------------------------------------------------- DataError Traceback (most recent call last) <ipython-input-5-96258e9511e8> in <module>() ----> 1 cur.execute("insert into bitflyer values('best_ask_size')") DataError: 型double precisionの入力構文が無効です: "best_ask_size" LINE 1: insert into bitflyer values('best_ask_size') ^
また、辞書から変数へ以下のように代入し、入力してみたのですがダメでした。
best_ask_size = a['best_ask_size']
#クォーテーションなし cur.execute("insert into bitflyer values(best_ask_size)") -------------------------------------------------- ProgrammingError Traceback (most recent call last) <ipython-input-8-3d83a90cb076> in <module>() ----> 1 cur.execute("insert into bitflyer values(best_ask_size)") ProgrammingError: 列"best_ask_size"は存在しません LINE 1: insert into bitflyer values(best_ask_size) ^
#クォーテーションあり cur.execute("insert into bitflyer values('best_ask_size')") -------------------------------------------------- DataError Traceback (most recent call last) <ipython-input-6-96258e9511e8> in <module>() ----> 1 cur.execute("insert into bitflyer values('best_ask_size')") DataError: 型double precisionの入力構文が無効です: "best_ask_size" LINE 1: insert into bitflyer values('best_ask_size') ^
辞書キーとテーブルのカラムを対応させ、値を入力したいです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/09/02 10:10