Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何引用Python对象并将其放入MySQL?_Python_Mysql - Fatal编程技术网

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

如何引用Python对象并将其放入MySQL?,python,mysql,Python,Mysql,我试图实现的是将python脚本生成的数据放入MySQL数据库。到目前为止,我已经能够使用Python生成数据,并将其打印出来,但我不太确定如何将其放入mysql表中。我已经了解到可以使用MySQLdb作为两者之间的连接器,目前我已经能够将数据放入表中,但只能手动键入数据 希望代码有意义,但我正在尝试将BidSize、AskSize、BidPrice和AskPrice中的值放入表中 from wrapper_v3 import IBWrapper, IBclient from swigibpy

我试图实现的是将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'))")

按如下方式参数化查询:

# 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))

按如下方式参数化查询:

# 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中也列出了这个流程,要求所有数据库适配器都遵守这个流程

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

cursor.close()
conn.close()

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

正如制造商正确指出的,请参数化您的查询以防止SQL注入

然而,您没有看到写入表的数据的原因是您没有提交事务。光标正在向事务添加查询,但只有在您指示提交之后,数据才会实际写入数据库

在添加光标查询以完成事务后添加
con.commit()

在较早版本的MySQLdb适配器中,Python数据将自动提交。但这被认为是“不好的做法”,因为程序员对事务的控制应该得到尊重。Python中也列出了这个流程,要求所有数据库适配器都遵守这个流程

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

cursor.close()
conn.close()

否则,您的连接将在空闲状态下保持打开状态,您可能会耗尽您的连接插槽池。

James,这些答案对您有帮助吗?或者您对建议的内容还有其他问题吗?James,这些答案对您有帮助吗?或者您对建议的内容还有其他问题吗?