我试图在mariaDB中的一个表中输入许多行。为此,我想使用executemany()来提高速度。插入的行依赖于另一个表,这是用SELECT找到的。我发现SELECT语句在executemany()中不起作用。有没有其他方法来解决这个问题?
import mariadb
connection = mariadb.connect(host=HOST,port=PORT,user=USER,password=PASSWORD,database=DATABASE)
cursor = connection.cursor()
query="""INSERT INTO [db].[table1] ([col1], [col2] ,[col3])
VALUES ((SELECT [colX] from [db].[table2] WHERE [colY]=? and
[colZ]=(SELECT [colM] from [db].[table3] WHERE [colN]=?)),?,?)
ON DUPLICATE KEY UPDATE
[col2]= ?,
[col3] =?;"""
values=[input_tuplets]
当运行代码时,我得到[col1]
(SELECT语句)的相同值,它对应于第一个元组的值。
如果SELECT在executemany()中不起作用,对于我想做的事情有没有其他的解决方法?谢谢!
2条答案
按热度按时间35g0bw711#
我认为阅读所需的表,在python中进行搜索,使用exeutemany()插入所有数据。这将需要2个以上的查询(读取到表),但在计算时间方面是可以的。
gfttwv5a2#
感谢您提出的第一个关于stackoverflow的问题,该问题发现了MariaDB服务器中的一个错误。
下面是重现该问题的简单脚本:
巨蟒:
我已在MariaDB漏洞跟踪系统中提交了issue。
作为一种解决方法,我建议将国家表读入一个数组(根据Wikipedia,有195个不同的国家),并使用这些值而不是子查询。
例如:
然后在执行中