如何引用Python对象并将其放入MySQL?

2024-09-28 05:16:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图实现的是将用python脚本生成的数据放入MySQL数据库。到目前为止,我已经能够用Python生成数据并将其打印出来,但是我不太确定如何将其放入mysql表中。我了解到可以使用MySQLdb作为两者之间的连接器,目前我已经能够将数据放入表中,但只能手动键入数据。你知道吗

希望代码有意义,但我正在尝试将BidSize、AskSize、BidPrice和AskPrice中的值放入表中。你知道吗

from wrapper_v3 import IBWrapper, IBclient
from swigibpy import Contract as IBcontract

if __name__=="__main__":
"""
This simple example returns streaming price data
"""

callback = IBWrapper()
client=IBclient(callback)

ibcontract = IBcontract()
ibcontract.secType = "FUT"
ibcontract.expiry="201612"
ibcontract.symbol="GE"
ibcontract.exchange="GLOBEX"

ans=client.get_IB_market_data(ibcontract)
print "Bid size, Ask size; Bid price; Ask price"
print ans


import MySQLdb as mdb

con = mdb.connect('localhost', 'testuser', 'test623', 'testdb');

with con:

cur = con.cursor()
cur.execute("DROP TABLE IF EXISTS Histdata")
cur.execute("CREATE TABLE Histdata(Id INT PRIMARY KEY AUTO_INCREMENT, \
             Name VARCHAR(25), BidSize VARCHAR(20), AskSize VARCHAR(20), BidPrice VARCHAR(20), AskPrice VARCHAR(20))")
cur.execute("INSERT INTO Histdata(Name,BidSize,AskSize,BidPrice,AskPrice) VALUES('test','test','test','test','test'))")

Tags: 数据testimportexecuteconpricemysqldbcur
2条回答

将查询参数化如下:

# assuming ans is a list
bid_size, ask_size, bid_price, ask_price = ans
cur.execute('''
  INSERT INTO Histdata
  (Name,BidSize,AskSize,BidPrice,AskPrice) 
  VALUES(%s,%s,%s,%s,%s)''', ('test', bid_size, ask_size, bid_price, ask_price))

正如编造者正确指出的,请参数化您的查询以防止SQL注入。你知道吗

但是,您没有看到写入表的数据的原因是您没有提交事务。您的游标正在向事务添加查询,但只有在您指示提交之后,数据才真正写入数据库。你知道吗

在添加光标查询以完成事务之后添加con.commit()。你知道吗

在较早版本的MySQLdb适配器中,Python数据将自动提交。但这被认为是“糟糕的做法”,因为程序员对事务的控制应该得到尊重。这个流程也在Python的DB API中进行了阐述,所有数据库适配器都需要遵循这个流程。你知道吗

请注意:完成后,不要忘记关闭光标和连接:

cursor.close()
conn.close()

否则,您的连接将在空闲状态下保持打开状态,并且可能耗尽连接插槽池。你知道吗

相关问题 更多 >

    热门问题