小编Mic*_*nze的帖子

Python MySQLdb空选择查询,尽管手动查询执行提供结果

我编写了一个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)

我已经尝试了一切,以了解它为什么会这样做:

  • 禁用查询缓存并在查询中添加随机x = x,以防mysql缓存被类似查询混淆
  • 启用mysql查询日志记录:查询通过但仍返回空集
  • 将cursor.connect移动到database.connect,并返回到getData(),没有区别

我想知道我不理解的东西.

python mysql daemon

7
推荐指数
1
解决办法
2921
查看次数

使用Mysql对链表进行多次INSERT

我有两个表,一个链接到另一个的主键.目前我插入表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)等); 或类似的.

我没有存储过程经验,所以我正在寻找继续前进的方向.

mysql stored-procedures insert last-insert-id

6
推荐指数
2
解决办法
2万
查看次数