- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用以下函数:
import pyodbc
def execute_side_effect_stmt(sql_stmt: str, params: list):
with get_connection() as conn:
cursor = conn.cursor()
cursor.executemany(sql_stmt, params)
columns = [column[0] for column in cursor.description]
results = cursor.fetchall()
response = []
for row in results:
response.append(dict(zip(columns, row)))
conn.commit()
if not response:
return ''
return response
使用以下参数:
sql = """INSERT INTO dbo.events
(sha, duration)
OUTPUT Inserted.id, Inserted.sha
VALUES (?, ?)"""
params = [('123',1),('456', 2), ('789', 3)]
result = execute_side_effect_stmt(sql, params)
结果仅返回参数中最后一个条目的 id 和 sha。一切都正确地插入到数据库中。非常欢迎任何关于为什么只有最后一个插入给出输出的见解。
最佳答案
原因是cursor.executemany()
对params
中的每个元素执行SQL语句。如图docs ,除非您设置 cursor.fast_executemany = True
,否则 INSERT
语句将被调用 len(params)
次。
使用 cursor.fast_executemany = True
,结果将是单个插入,如 here 所述
如所述:
Here, all the parameters are sent to the database server in one bundle (along with the SQL statement), and the database executes the SQL against all the parameters as one database transaction. Hence, this form of
executemany()
should be much faster than the defaultexecutemany()
. However, there are limitations to it, seefast_executemany
for more details.
您的代码可以修改为:
import pyodbc
def execute_side_effect_stmt(sql_stmt: str, params: list):
with get_connection() as conn:
cursor = conn.cursor()
cursor.fast_executemany = True
cursor.executemany(sql_stmt, params)
columns = [column[0] for column in cursor.description]
results = cursor.fetchall()
response = []
for row in results:
response.append(dict(zip(columns, row)))
conn.commit()
if not response:
return ''
return response
关于python - Pyodbc executemany 只返回插入的最后一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64609190/
如何获得这些 SQL 语句序列?上类?我以前只处理过单个 select 语句,而 cursor.execute 工作得很好。我现在不知道在这种情况下该怎么办。我收到的错误是格式需要映射 args =
我正在使用 Python 及其 MySQLdb 模块将一些测量数据导入 Mysql 数据库。我们拥有的数据量非常大(目前大约有 250 MB 的 csv 文件, future 还会有更多)。 目前我使
使用以下函数: import pyodbc def execute_side_effect_stmt(sql_stmt: str, params: list): with get_connec
我可以使用以下代码迭代 python 对象,但是我希望能够使用占位符作为架构和表名称,通常我使用 {}.{} 执行此操作.format() 方法,但是如何将这两个方法结合起来? cur.execute
我正在使用Python中的MySQLdb模块来编写SQL语句。我很难以我想要的方式使用变量。这是我的工作: stmt = ''' INSERT INTO Table1 (name, status) S
如果我跑 cur.execute('SELECT * FROM some_table WHERE some_column = %s;', ('some_value',)) 然后立即调用 cur.fet
我正在使用 Python 及其 MySQLdb 模块,是否可以从条件中的元组/字典/列表中执行“selectmany”之类的操作 像这样: cursor.executemany("""SELECT *
我正在使用 Python MySQLdb 将数据插入 mysql 数据库。 InsertList 包含许多行。除了少数违反数据库完整性规则外,其他都是有效的。如果我运行下面的代码,命令会返回错误。 C
我有以下功能,可以批量插入 IPv6 IP 列表 def insertToDb(ipList): print("OK") try: conn = psycopg2.connect("d
我想按如下方式从 MySQL 中选择值 do_not_select = [1,2,3] cursor = database.cursor() cursor.executemany("""SELECT
我正在使用 oracledb (4.0.1) 和 Node (v10.14.2)。我在下面有 json 列表; [ { DIFFID: 8, DIFFDATE: 2019-11-01T14:0
我在下面的代码中找不到我的错误。当它运行时,出现类型错误:cur.executemany(sql % itr.next()) => 'function takes exactly 2 argument
我正在尝试将 psycopg2 executemany 用于简单的多插入,但我只能使用 dict 而不是“普通”值序列使其工作: # given: values = [1, 2, 3] ; curso
我正在使用 MySQLdb 模块插入到我的数据库中。我有以下代码 sqlString = """INSERT INTO PERFORMER (PERFORMER)
我有一个由名为 member 的字典组成的列表,我像这样插入到数据库中 # Executes query for each dictionary in member. cursor.e
在这种情况下,我创建了一个方法来在数据库中插入行。我向该方法提供列、值和表名。 COLUMNS = [['NAME','SURNAME','AGE'],['SURNAME','NAME','AGE']
我想在我的程序中使用 executemany 一次存储 20 条记录,这是文档中的内容... c.executemany( """INSERT INTO breakfast (name, spam
我正在尝试使用 pgdb 模块执行从 Python 到 PostgreSQL 的 insert 语句。 我看到文档说: cursor.executemany(query, list of pa
如果我运行 SQL 命令 INSERT INTO my_table VALUES (?); 有约束 CREATE my_table( user_name VARCHAR(255) PRIMAR
我使用 Django cursor.execuremany 有一段时间了,我想做一些准备工作。 在这个 Stackoverflow 页面上,我读到使用字符串格式化运算符和问号是个坏主意。 How to
我是一名优秀的程序员,十分优秀!