Передача имени таблицы в качестве параметра в pyodbc

Я пытаюсь передать имя таблицы в pyodbc в качестве параметра для доступа к данным из ms sql 2005. Я пытался заменить его на ?, но это никогда не работает. Буду рад любым советам, как этого добиться.


person Siv Niznam    schedule 12.07.2011    source источник


Ответы (2)


Поскольку вы используете pyodbc, я предполагаю, что вы не вызываете SPROC. Я рекомендую создать вашу строку SQL в python, а затем передать ее SQL для выполнения.

import pyodbc
dbconn = pyodbc.connect(ConnectionString)
c = dbconn.cursor()

j = 'table1' #where table1 is entered, retreived, etc
query = "Select * from %s" % j
c.execute(query)
result = c.fetchall()
print 'Done'
person JMoney    schedule 10.08.2011
comment
Просто будьте осторожны, чтобы имя таблицы не исходило от пользовательского ввода или обратной связи браузера - это настройка для SQL-инъекции. - person Mark Ransom; 10.08.2011
comment
@Марк, ты делаешь отличное замечание. Но имена таблиц, по крайней мере, несколько легче очистить, чем некоторые другие типы ввода в SQL. - person TimothyAWiseman; 10.08.2011
comment
Это довольно старый ответ. Кто-нибудь знает, добавил ли pyodbc более безопасный способ сделать это? Возможно, что-то похожее на объекты шаблона psycopg2.sql.SQL? (psycopg2 — это адаптер базы данных PostgreSQL для Python) - person Håken Lid; 23.08.2019

У вас не может быть переменной в качестве имени таблицы SQL Server. Для этого вам нужно использовать динамический SQL.

Посмотрите здесь, как работать с динамическими именами таблиц. http://www.sommarskog.se/dynamic_sql.html#objectnames

person Mikael Eriksson    schedule 12.07.2011
comment
Я нашел сладкий способ сделать это! скоро поделюсь! - person Siv Niznam; 12.07.2011