python - 将 Python 列表传递给 SQL Server 查询的 ORDER BY 子句

标签 python sql-server python-3.x pyodbc

我正在尝试将 python 列表传递给 SQL Server 查询。我遇到了 pyobdc 错误的问题。

我尝试了以下方法:

# order_by is a list with 80 strings e.g. ['a','b','c', ...]
placeholders = ", ".join(["?"] * len(order_by))
query = """
     SELECT *
     FROM my_table_name
     ORDER BY (""" + placeholders + ")"
cursor.execute(query, order_by)

它给我一个 pyodbc 错误:

Incorrect syntax near ','. (102)

我不知道我在哪里犯了语法错误

最佳答案

查询参数仅用于传递列,而不是列名称。在需要动态包含对象名称的情况下,您需要使用动态 SQL(字符串替换),例如,如下所示:

schema_name = 'dbo'
table_name = 'Donor'

sql = """\
SELECT QUOTENAME(COLUMN_NAME) 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA=? AND TABLE_NAME=?
ORDER BY ORDINAL_POSITION
"""
crsr.execute(sql, schema_name, table_name)
columns = ', '.join([x[0] for x in crsr.fetchall()])
sql = f"SELECT * FROM [{schema_name}].[{table_name}] ORDER BY {columns}"

print(sql)
# SELECT * FROM [dbo].[Donor] ORDER BY [id], [last_name], [first_name]

关于python - 将 Python 列表传递给 SQL Server 查询的 ORDER BY 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56184942/

相关文章:

Python 清除用于 Tkinter 小部件的列表

python - 如何从列表列表中制作平面列表?

mysql - Entity Framework 的多数据库支持

sql-server - Unicode 和性能

sql-server - 必须声明标量变量

javascript - AJAX 请求后从 Flask 返回错误消息并在 JavaScript 上处理它?

python-3.x - 具有可变长度多项式的曲线拟合

python - 用于映射到seaborn中的构面网格的标签函数

java - Python 和 Java 哪种语言更支持开发 GUI 和网络编程?

Python pickling 保持对象身份