我编写了一个python守护进程,不断轮询mysql数据库.当我在查询之间连续连接并重新连接到数据库时,它工作正常,如下所示:
def connect(self):
self.connection = MySQLdb.connect(...)
self.cursor = self.connection.cursor()
return self.cursor
def disconnect(self): ...
self.cursor.close()
self.connection.close()
def getData(); ....
sqlcmd = """SELECT ...."""
self.cursor.execute (sqlcmd % (params))
result = self.cursor.fetchall()
return result
if __name__ == "__main__":
db = prepaid_db.Database()
while 1:
dbConnection = db.connect()
data = db.getData()
... do stuff
db.disconnect
Run Code Online (Sandbox Code Playgroud)
但是当我尝试保持数据库连接打开(如下所示)时,我得到一个空查询,即使在它运行时我可以手动查询数据库,给它相同的查询并得到我期望的结果.
if __name__ == "__main__":
db = prepaid_db.Database()
dbConnection = db.connect()
while 1:
data = db.getData()
... do stuff
db.disconnect
Run Code Online (Sandbox Code Playgroud)
我已经尝试了一切,以了解它为什么会这样做:
我想知道我不理解的东西.
我有两个表,一个链接到另一个的主键.目前我插入表A,获取LAST_INSERT_ID,然后INSERT到表B.
但我有数百条记录要插入,我想加快速度.
在Mysql中你可以:
INSERT INTO table_a (v1, v2, c3) VALUE (0, 1, 2);
INSERT INTO table_a (v1, v2, v3) VALUE (4, 5, 6);
Run Code Online (Sandbox Code Playgroud)
等等,或
INSERT INTO table_a (v1, v2, v3) VALUE (0, 1, 2), (4, 5, 6), etc 更快地添加多个条目 - 但仅适用于一个表.
当然后者要快得多.我想知道是否可以使用存储过程为两个链接表复制此行为,以及它是否会在性能上有类似的显着改进:
类似于:调用special_insert((0,1,2),(4,5,6)等); 或类似的.
我没有存储过程经验,所以我正在寻找继续前进的方向.