Python 预编译SQL

在python中经常执行批量sql查询命令,原先采用的包是MysqlDB这个,

采用的方式:

import MySQLdb as mdb
connect = mdb.connect(user='username', password='password',  
                              host='localhost', database='database_name',charset="utf8")
# sqlS都是经过处理的sql语句,数据都已经填充好了
sqls = ["select .....","select .....","select ....."]
cur = connect.cursor()
results = []
for sql in sqls:
    cur.execute(sql)
    rows = cur.fetchall()
    results.append(rows)

如果采用预编译的方式是:

import time

import mysql.connector
# 连接MySQL数据库  ,,,
cnx = mysql.connector.connect(user='username', password='password',  
                              host='localhost', database='database_name')
# 创建游标对象
cursor = cnx.cursor(prepared=True)

# 预编译SQL语句
query = ("select * from login_table where user_id =%s")

useids = [1,2,3,4,.....]
params = [(i,) for i in useids]
t = time.time()
results =[]
try:
    for i in params:
        cursor.execute(query, i)
        data = cursor.fetchall()
        results.append(data)
except Exception as e:
    print(f"error:{e}")
finally:
    cursor.close()
    cnx.close()
t2 = time.time()
print(f"cost:{t2-t}")

按道理说预编译在进行批量执行的时候,速度会提升才对,但是经过实际测试:1000条用户数据,同样的sql语句。

第一段代码执行时间 均值是 19秒,

第二段采用预编译的执行时间是40秒。预编译的速度竟然慢了这么多。很奇怪。难道是预编译有错?

看来优化的王道还是尽量减少sql的执行次数,比方说,把一条条的执行修改为 userid in (一批userId)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值