Python批量插入问题?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python批量插入问题?相关的知识,希望对你有一定的参考价值。

直接上代码:
s = 10000
list = []
c=0
sql = """insert into customer(id,`name`,company_id, sharding_id) values(%s,%s,%s,%s)"""
for k in range(0,500):
i = 2000000 + k;

list.append([i, 'haha'+str(i), i%5, s])
if c == 10:
cursor = conn.cursor()
cursor.executemany(sql,list)
conn.commit()
c = 0
print("insert into customer many data cursor:"+str(i))
list.clear()
c = c + 1
if s==10000:
s = 10010
elif s==10010:
s = 10020
elif s== 10020:
s = 10030
elif s==10030:
s = 10000

if i>0:
cursor.executemany(sql,list)
conn.commit()

报错:
Traceback (most recent call last):
File "testInsertmysql.py", line 19, in <module>
cursor.executemany(sql,list)
File "/usr/lib64/python2.6/site-packages/MySQLdb/cursors.py", line 223, in executemany
r = self._query('\n'.join([query[:p], ',\n'.join(q), query[e:]]))
File "/usr/lib64/python2.6/site-packages/MySQLdb/cursors.py", line 317, in _query
rowcount = self._do_query(q)
File "/usr/lib64/python2.6/site-packages/MySQLdb/cursors.py", line 281, in _do_query
db.query(q)
_mysql_exceptions.ProgrammingError: (1064, 'insert multi rows not supported')
[root@localhost python_space]# _mysql_exceptions.ProgrammingError: (1064, 'insert multi rows not supported')
-bash: syntax error near unexpected token `1064,'

参考技术A s = 10000
list = []
c=0
sql = """insert into customer(id,name,company_id,sharding_id)
values(:col1,:col2,:col3,:col4)"""
for k in range(0,12):
i = 2000000 + k;

list.append([i, 'haha'+str(i), i%5, s])
#list1.append([i, i, i, i])
if c == 10:
cursor = conn.cursor()
#print list
cursor.executemany(sql,list)
conn.commit()
c = 0
print("insert into customer many data cursor:"+str(i))
list=[]
c = c + 1
if s==10000:
s = 10010
elif s==10010:
s = 10020
elif s== 10020:
s = 10030
elif s==10030:
s = 10000

if i>0:
cursor.executemany(sql,list)
conn.commit()
程序调试通过,改了 2个地方
1.
sql = """insert into customer(id,name,company_id,sharding_id)
values(:col1,:col2,:col3,:col4)"""

2.list.clear()---》list=[]

如何在 CrateDB 中使用 python 执行批量插入?

【中文标题】如何在 CrateDB 中使用 python 执行批量插入?【英文标题】:How can I perform a bulk insert with python in CrateDB? 【发布时间】:2018-08-15 16:34:29 【问题描述】:

我正在尝试在 CrateDB 中使用 python 进行批量插入。与使用 pyodbc 的 SQL Server 一样,executemany 命令并不真正执行批量插入。 使用 pyodbc 我可以使用它:

cursor.fast_executemany = True

解决问题,如here 所述。但是对于 python 的库“crate”,我没有这个选项。有解决办法吗?

【问题讨论】:

【参考方案1】:

与 pyodbc 不同, cratedb python 驱动程序在没有该选项的情况下执行真正的批量插入。 请参阅我们文档中的示例https://crate.io/docs/clients/python/en/latest/client.html#inserting-data

【讨论】:

我将 SQL Server 的插入速度与 Crate 的进行了比较,结果与我的预期不同:SQL Server 更快,用相同的函数 executemany 测试两个 DBMS(其中 cursor.fast_executemany = True SQL Server python 脚本。将此选项设置为 False,SQL Server 会慢得多)。我在 CrateDB 的配置中犯了一些错误吗?我将 .yml 配置文件保留为默认配置,并在 localhost 中运行 Crate。 不确定,取决于您的设置。你运行多少节点?在什么操作系统上? Windows 10 Home 上的一个节点 cratedb 确实提升了,当您在多个节点上使用它时,在基于 unix 的系统上的性能也更好。您可能希望使用多个连接写入 cratedb 并确保优化分片。 好的,谢谢!我会尝试使用更多的节点。我希望找到一个 CrateDB 克服 SQL Server 的“盈亏平衡点”,增加插入的数据量。

以上是关于Python批量插入问题?的主要内容,如果未能解决你的问题,请参考以下文章

python ORM允许创建表和批量插入?

Python批量插入数据到MySQL

Python SQLAlchemy 批量插入时忽略重复键

Python SQLAlchemy 批量插入时忽略重复键

带有字符编码的 Python MySQL 批量插入错误

Python:MQTT代理消息批量插入mysql数据库