-1

このクエリをmysqlに挿入できません。json.dump() を実行しました。テキストとブロブを試しました。引用符を開いたり閉じたりしてみました。

INSERT INTO mytable (campaign_object) 
VALUES ( {"cpa_type": "null", "device_tablets": "True",
 "language": "all", "end_date": null, "bid": "1", "budget": "1", "goal_type": "ctr",
 "frequency": "null", "location": "all", "device_mobile": "True", "device_desktop": 
"True", "impressions": "null", "campaign_name": "1", "start_date": "2012-09-14", 
"insert_date": "2012-09-13 23:00:1347548413"})  

だから... MyhSQLがjsonを処理できると想像する必要があります。どうしても漬物にしたい。

4

2 に答える 2

4

常にパラメーター化されたクエリを使用します。

value = '''{"cpa_type": "null", "...0:1347548413"}'''
cursor.execute("INSERT INTO mytable (campaign_object) VALUES (%s)", (value,))

このようにして、json をエスケープする必要がなくなり、SQL インジェクションから安全になります。

于 2012-09-13T23:12:06.053 に答える
2

ハンドルの意味によって異なります。

MySQL は JSON をデータ型として認識しません。ただし、JSON 式を文字列として格納できます。

campaign_object列が次のような文字列として宣言されていると想定しています。

CREATE TABLE mytable (
  campaign_object NVARCHAR(8000)
);

その場合、次のように JSON 文字列全体を一重引用符で囲む必要があります。

INSERT INTO mytable (campaign_object) 
VALUES ( '{"cpa_type": "null", "device_tablets": "True",
 "language": "all", "end_date": null, "bid": "1", "budget": "1", "goal_type": "ctr",
 "frequency": "null", "location": "all", "device_mobile": "True", "device_desktop": 
"True", "impressions": "null", "campaign_name": "1", "start_date": "2012-09-14", 
"insert_date": "2012-09-13 23:00:1347548413"}')  

それ以外の場合、MySQL は未加工の JSON を SQL として解釈しようとするため、不可解なメッセージで文句を言います。table の定義を使用してSQL Fiddleで例を実行しようとすると、次のmytableエラーが表示されます。

スキーマの作成に失敗しました: 列の数が行 1 の値の数と一致しません:

于 2012-09-13T23:15:15.423 に答える