【问题标题】:mariadb python - executemany using SELECTmariadb python - executemany 使用 SELECT
【发布时间】:2023-01-31 18:06:04
【问题描述】:

我试图将许多行输入到 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() 中不起作用,是否还有其他解决方法来解决我正在尝试做的事情? 多谢!

【问题讨论】:

  • 您能否提供一个带有参数且最好不要在 MSSQL 仿真模式下的简短可重现示例?
  • 感谢您对@GeorgRichter 的回应。
  • 感谢您对@GeorgRichter 的回应。我将在下面放一个可重现的(愚蠢的)例子。该示例在不处于仿真模式时有效。我还在仿真模式下处理单个查询。问题是在使用命令execute_many() 时。解决这个问题的一种方法是找到另一种不使用 select 的方法。有任何想法吗?
  • CREATE TABLE region (id INT(6) AUTO_INCREMENT PRIMARY KEY,id_country INT(6),region VARCHAR(30)) CREATE TABLE countries (id INT(6) AUTO_INCREMENT PRIMARY KEY, country VARCHAR(30)) insert into countries (country) values ("ger"),("fra") insert into region (region,id_country) values ("sounth",(select id from countries where country="ger"))

标签: python-3.x mariadb executemany


【解决方案1】:

我认为读出需要的表格, 在 python 中进行搜索, 使用 exeutemany() 插入所有数据。 它将需要 2 个以上的查询(读取表),但在计算时间方面是可以的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-22
    • 2016-01-06
    • 2015-03-12
    • 1970-01-01
    • 2016-11-02
    • 2010-09-28
    • 2013-08-07
    • 2020-07-06
    相关资源
    最近更新 更多