【问题标题】:inserting json to mysql using python使用python将json插入mysql
【发布时间】:2018-03-02 06:16:59
【问题描述】:

您好,我可以查询但无法使用以下代码插入到我的 json 字段中,问题不是很困难,但由于我对 mysql 的绝对新手无法弄清楚..每次我都会得到一个变量调用 last_time首先我需要插入,然后从第二次开始我需要更新 last_time..如果我手动执行,我可以根据需要执行并获取输出..如下图所示..

import pymysql.cursors
import datetime
import json

last_time='2344' #this value i will get output from my program

connection = pymysql.connect(host='localhost',
                         user='root',
                         password='Admin...',
                         db='cl......',
                         charset='utf8mb4',
                         cursorclass=pymysql.cursors.DictCursor)
print "connect successfull"

try:
   with connection.cursor() as cursor:
      sql = "INSERT INTO `tt_inv_refresh` (`cust_id`, `res_type`, `refresh_dtls`) VALUES (%s, %s, %s)"
      cursor.execute(sql, ('2','elb','{"vot":[{"elb":"name1","last_refreshtime":last_time},{"elb":"name2","last_refreshtime":last_time}]}'))
connection.commit()

except Exception as e:
   print str(e)

print "inserted"

finally:
   connection.close()

如果有人指出我的代码中的错误,我们将不胜感激...谢谢

【问题讨论】:

  • 你的 refresh_dtls 表的列类型是什么?另外,能分享一下traceback吗?
  • 有 4 列..id -int,cust_id-int,res_type-enum,refresh_dtls-json..希望你问这个答案??

标签: python mysql sql pymysql


【解决方案1】:

你错过了last_time周围的报价

cursore.execute的行改正为

cursor.execute(sql, ('2','elb','{"vot":
      [{"elb":"name1","last_refreshtime":' + last_time + '},
      {"elb":"name2","last_refreshtime":' + last_time+ '}]}'))

为避免以后出现此类问题,您可以考虑定义一个对象并使用json.dumps

class Elb:

    def toJSON(self):
        return json.dumps(self, default=lambda o: o.__dict__, 
        sort_keys=True, indent=4)

    # you can use array or dict | I just copied from one of my code
    # which reqd it to be an array
    def mapper(self, detailArray = []): # you can use array or dict
        self.elb = detailArray[0];
        self.last_refreshtime = detailArray[1];

所以在你为一个实例设置数据之后,

el_instance = Elb()
el_instance.mapper(<array-with-data>)

您可以在任何地方拨打el_instance.toJSON()获取序列化数据。

【讨论】:

  • 如果我想再次更新 last_time=1000 sql="UPDATE tt_inv_refresh SET refresh_dtls= JSON_SET(refresh_dtls, {"elb":"name2","last_refreshtime":' + last_time+ '}) where id = 2" cursor.execute(sql) 不工作
  • 尝试使用 sql="UPDATE tt_inv_refresh SET refresh_dtls = " + JSON_SET(refresh_dtls, '{"elb":"name2","last_refreshtime":' + str(last_time) + '}') + +' 其中 id = 2;' cursor.execute(sql)
  • pythonforbeginners.com/concatenation/… 是了解为什么存在错误的好地方。干杯!
  • 再次感谢kishor的精彩回复,名称'JSON_SET'未定义问题来了,我也可以使用JSON_REPLACE ..还是同样的问题..需要在我的python代码中定义..json_set ??
  • 这是为 NULL 吗??
猜你喜欢
  • 2011-05-14
  • 2019-01-08
  • 2014-08-16
  • 2016-01-17
  • 2015-06-05
  • 2014-02-26
  • 2016-10-10
  • 2017-12-31
  • 2018-05-31
相关资源
最近更新 更多