使用python json对象插入查询

问题描述 投票:-1回答:1

我是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()

有人可以帮我怎样做。.

关于,Prashant。

python json sybase
1个回答
0
投票

您不能将变量放在这样的字符串中间。您应该将占位符放在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"]})

请参见python-sybase execute()中对manual方法的描述

如果这不起作用,您可以使用字符串格式,但是如果您不清理数据,那么就有可能进行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)
© www.soinside.com 2019 - 2024. All rights reserved.