используя python json запрос на вставку объекта - PullRequest
0 голосов
/ 08 мая 2020

Я новичок в 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()

Может кто-нибудь, пожалуйста, помогите мне, как я могу это сделать ..

С уважением, Прашант.

1 Ответ

0 голосов
/ 08 мая 2020

Вы не можете воткнуть переменные в середине строки вот так. Вы должны поместить заполнители в строку 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 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)
...