Передайте список Python в предложение ORDER BY запроса SQL Server - PullRequest
2 голосов
/ 17 мая 2019

Я пытаюсь передать список 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:

Неверный синтаксис рядом с ',».(102)

Не могу понять, где я сделал синтаксическую ошибку

1 Ответ

1 голос
/ 17 мая 2019

Параметры запроса используются только для передачи столбца значения , а не столбца имена .В случаях, когда вам нужно динамически включать имена объектов, вам нужно использовать Dynamic 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]
...