- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试将 python 脚本生成的一些数据存储在 MySQL 数据库中。本质上我正在使用命令:
con = oursql.connect(user="user", host="host", passwd="passwd",
db="testdb")
c = con.cursor()
c.executemany(insertsimoutput, zippedsimoutput)
con.commit()
c.close()
在哪里,
insertsimoutput = '''insert into simoutput
(repnum,
timepd,
...) values (?, ?, ...?)'''
插入了大约 30,000 行,大约有 15 列。以上大约需要 7 分钟。如果我使用 MySQLdb 而不是 oursql,大约需要 2 秒。为什么会有如此巨大的差异?这是否应该在 oursql 中以其他方式完成,我们的 oursql 非常慢?如果有更好的方法使用 oursql 插入此数据,请告诉我,我将不胜感激。
谢谢。
最佳答案
区别在于 MySQLdb 会对您的查询进行一些黑客攻击,而 oursql 不会...
拿这个:
cursor.executemany("INSERT INTO sometable VALUES (%s, %s, %s)",
[[1,2,3],[4,5,6],[7,8,9]])
MySQLdb 在遇到这个之前翻译它:
cursor.execute("INSERT INTO sometable VALUES (1,2,3),(4,5,6),(7,8,9)")
但如果你这样做:
cursor.executemany("INSERT INTO sometable VALUES (?, ?, ?)",
[[1,2,3],[4,5,6],[7,8,9]])
在我们的 sql 中,它被翻译成类似这样的伪代码:
stmt = prepare("INSERT INTO sometable VALUES (?, ?, ?)")
for params in [[1,2,3],[4,5,6],[7,8,9]]:
stmt.execute(*params)
因此,如果您想模拟 mysqldb 正在做的事情,但又想从 oursql 的准备好的语句和其他优点中受益,您需要这样做:
from itertools import chain
data = [[1,2,3],[4,5,6],[7,8,9]]
one_val = "({})".format(','.join("?" for i in data[0]))
vals_clause = ','.join(one_val for i in data)
cursor.execute("INSERT INTO sometable VALUES {}".format(vals_clause),
chain.from_iterable(data))
我敢打赌当你这样做时我们的 sql 会更快 :-)
此外,如果您认为它很丑,那您是对的。但请记住,MySQL 数据库在内部做了一些更丑陋的事情——它使用正则表达式来解析您的 INSERT 语句并中断参数化部分,然后执行我建议您为 oursql 执行的操作。
关于python - oursql 插入数据速度极慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11053324/
我正在尝试将 python 脚本生成的一些数据存储在 MySQL 数据库中。本质上我正在使用命令: con = oursql.connect(user="user", host="host", pas
当我尝试使用 pip install oursql 在虚拟环境下安装 oursql 时,出现以下错误: Collecting oursql Using cached oursql-0.9.3.1.
我有一个复杂项目的以下代码: from gevent import monkey monkey.patch_all() import gevent import oursql def run(num)
尝试在 ubuntu 12.10 上为 python3x 和 sqlalchemy0.8 安装 oursql 驱动程序。它失败并出现以下错误。 sudo pip-3.2 install oursql
我正在尝试在 python 3.2 中使用 oursql,但进展确实不太顺利。 事实: 我下载了 oursql 二进制文件并运行了安装程序。我安装了 MySQL 5.1。我单独下载了libmysql
OurSQL 是 Python 的 MySQL 驱动程序,更多 here 。我连接失败,我怀疑问题出在端口或主机上 - 更多详细信息 here关于环境变量,我正在使用 Ubuntu。 $ cat t.
我在看oursql的文档遇到了这个description for establishing a connection : By default, oursql will try to use unic
我正在使用 oursql Python 库与 MySQL 数据库对话。我想编写代码来按姓名或电子邮件地址搜索用户。这是我目前的代码: query = get_query() cursor.execut
我按照安装说明在 Mac OS X 上安装 oursql。因为 sudo pip install oursql 告诉我,它找不到 mysql_config 我(使用 locate mysql_conf
我是一名优秀的程序员,十分优秀!