-1

我无法将此查询插入 mysql。我做了一个 json.dump()。我尝试了文本和blob。我尝试打开和关闭引号。

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 Fiddlemytable中执行您的示例时,我看到此错误:

架构创建失败:列计数与第 1 行的值计数不匹配:

于 2012-09-13T23:15:15.423 回答