[解決済み] SQLAlchemy (psycopg2.ProgrammingError) can't adapt type 'dict'.
2022-02-07 12:32:15
質問
私の問題に対する解決策をウェブ上で見つけることができませんでした。 SQLAlchemyを使って、このpandas dfをPostgresqlのテーブルに挿入しようとしています。
- Pandas 0.24.2
- sqlalchemy 1.3.3
- パイソン 3.7
私のコードの関連する部分は以下の通りです。
engine = create_engine('postgresql://user:pass@host:5432/db')
file = open('GameRoundMessageBlackjackSample.json', 'r', encoding='utf-8')
json_dict = json.load(file)
df = json_normalize(json_dict, record_path='cards', meta=['bet', 'dealerId', 'dealerName', 'gameOutcome', 'gameRoundDuration', 'gameRoundId', 'gameType', 'tableId', 'win'])
df = df[['win', 'betAmount', 'bets']]
df.to_sql('test_netent_data', engine, if_exists='append')
このテーブルからカラム 'bets' を除いて sql にロードしようとすると、すべてが期待どおりに動作します。しかし、それを含めると、次のエラーが発生します。
sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) can't adapt
type 'dict'
[SQL: INSERT INTO test_netent_data (index, win, "betAmount", bets) VALUES (%(index)s, %(win)s, %(betAmount)s, %(bets)s)]
[parameters: ({'index': 0, 'win': '2000.00', 'betAmount': '1212112', 'bets': [{'name': '1', 'amount': '1212112'}]}, {'index': 1, 'win': '2000.00', 'betAmount': '1212000', 'bets': [{'name': '1', 'amount': '1212000'}]}, {'index': 2, 'win': '2000.00', 'betAmount': '1212112', 'bets': [{'name': '1', 'amount': '1212112'}]}, {'index': 3, 'win': '2000.00', 'betAmount': '1212000', 'bets': [{'name': '1', 'amount': '1212000'}]}, {'index': 4, 'win': '2000.00', 'betAmount': '1212112', 'bets': [{'name': '1', 'amount': '1212112'}]}, {'index': 5, 'win': '2000.00', 'betAmount': '1212000', 'bets': [{'name': '1', 'amount': '1212000'}]}, {'index': 6, 'win': '2000.00', 'betAmount': '1212112', 'bets': [{'name': '1', 'amount': '1212112'}]}, {'index': 7, 'win': '2000.00', 'betAmount': '1212000', 'bets': [{'name': '1', 'amount': '1212000'}]})]
(Background on this error at: http://sqlalche.me/e/f405)
このカラムの型を確認しましたが、他のカラムと変わりなく(type object)でした。また、文字列に変換しようとしたところ、他のエラーがたくさん出てしまいました。 簡単な解決策があるはずなのですが、私の頭では理解することができません。
解決方法は?
私にとっては、より良い方法は、このリストのdictをパースしてカラムに分離することです。しかし、もしあなたがカラム ベット を SQL テーブルに変換する必要があります。オブジェクトと書いていますが、ディクショナリでリストになっています。以下は、これを文字列に変換するコードです。
df['bets'] = list(map(lambda x: json.dumps(x), df['bets']))
関連
-
[解決済み] BeautifulSoupでJSONオブジェクトから特定の値をパースする
-
[解決済み] SQLAlchemy の行オブジェクトを Python の dict に変換するには?
-
[解決済み] REST API - "Accept: application/json" HTTP ヘッダーを使用する
-
[解決済み] UnixツールでJSONをパースする
-
[解決済み] Node.js プロジェクトの package.json ファイルを自動的にビルドする方法はありますか?
-
[解決済み] .NET NewtonSoft JSONのデシリアライズマップを異なるプロパティ名に変更する。
-
[解決済み】GoのJSONマーシャルでJSONのキー名を小文字にする
-
[解決済み] JSONファイルのMongoimport
-
[解決済み] VSCodeでlaunch.jsonに環境変数を追加する方法
-
[解決済み] fs.writeFileSyncによるJSONオブジェクトのJSONファイルへの書き込み
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ネストしたng-repeat
-
[解決済み] Unreadable Notebook NotJSONError('Notebook does not appear to be JSON: u'{'cells": [\'{'cell_type": "...],)
-
[解決済み] Azure VMのエラーです。"あなたのアカウントは、このデバイスを使用できないように設定されています。詳細については、システム管理者にお問い合わせください" [終了しました]。
-
[解決済み] VBScriptによるJSONのデコード/エンコード
-
[解決済み] JSON標準 - 浮動小数点数
-
[解決済み] JSONのXSLT対応
-
json.loadsがエラーを報告します。二重引用符で囲まれたプロパティ名を期待:行1列2(char 1)
-
[解決済み] 構造体に複数のネームタグを定義する方法
-
[解決済み] jqを使用してjsonドキュメントの単一の値を更新するにはどうすればよいですか?
-
[解決済み] ASP.NETでWebAPIやMVCを使ってJSONを返す。