首页 > 解决方案 > 使用 python json 对象插入查询

问题描述

我对python很陌生..我有一个json对象。下面是代码。

jsondata = json.loads(data)

jsondata 看起来像这样

{u'approvalId': u'0', u'size-1': 202, u'indRate': u'0.003', u'orderNo': u'ROMA2-20200508-00001', u'brokerSymbol': u'', u'requestedFor': u'r101115', u'aggUnit': u'', u'repId': u'O70', u'noGoodShares': 0, u'requestedBy': u'r101115', u'status': 4, u'timestamp': u'May 08, 2020 02:29:52', u'symbol': u'IBM', u'broker': u'APOC RT', u'usedShares': 3, u'pubKey': u'O70.ROMA2-20200508-00001', u'locateBrokerId': u'APOC', u'goodShares': 500, u'rtLeafId': 900059, u'availableShares': 497, u'requestedShares': 500, u'brokerOrderNo': u'', u'indicativeRate': 0.0030000000000000001, u'pendingShares': 0}

我想在 sybase 数据库中插入这个,而不是所有的一些细节。在我尝试过的插入语句下面。

cur = conn.cursor()

sql = "INSERT into RT24.dbo.SLOrd(status, rtLeafId, orderNo, repId, symbol, broker, timestamp, modifiedTime) VALUES (d["status"], d["rtLeafId"], d["orderNo"], d["repId"], d["symbol"\
], d["broker"], d["timestamp"], d["timestamp"])"

cur.execute(sql)
conn.commit()

有人可以帮我我该怎么做..

问候,普拉尚特。

标签: pythonjsonsybase

解决方案


您不能将变量粘贴在这样的字符串中间。您应该在 SQL 字符串中放置占位符,然后提供参数字典作为cur.execute().

sql = """INSERT into RT24.dbo.SLOrd(status, rtLeafId, orderNo, repId, symbol, broker, timestamp, modifiedTime) 
        VALUES (@status, @rtLeafId, @orderNo, @repId, @symbol, @broker, @timestamp, @timestamp)"""
cur.execute(sql, {"@status": d["status"], "@rtLeafId": d["rtLeafId"], "@orderNo": d["orderNo"], "@repId": d["repId"], "@symbol": d["symbol"], "@broker": d["broker"], "@timestamp": d["timestamp"], "@timestamp": d["timestamp"]})

execute()python-sybase手册中方法的描述

如果这不起作用,您可以使用字符串格式,但是如果您不清理数据,则可能会进行 SQL 注入。

sql = f"""INSERT into RT24.dbo.SLOrd(status, rtLeafId, orderNo, repId, symbol, broker, timestamp, modifiedTime) 
        VALUES ({d["status"]}, {d["rtLeafId"]}, '{d["orderNo"]}', '{d["repId"]}', '{d["symbol"]}', '{d["broker"]}', '{d["timestamp"]}', '{d["timestamp"]}')"""
cur.execute(sql)

推荐阅读