2016-05-07 3 views
3

Я хотел бы иметь соединение между моим кодом python и базой данных SQL. Я прочитал несколько способов сделать это, но я не получаю результатов.Переменные PyMySQL в запросах

conn = pymysql.connect(user=X,passwd=X,host=X,port=X,database=X, charset='utf8', autocommit=True) 
curs = conn.cursor() 

try: 
    curs.execute('SELECT id,sing_name,bir_yr FROM singers_list WHERE bir_yr = ? ',year) 
    data = curs.fetchall()  
    for i in data: 
     yield " Data: " + str(i) + "<br/>" 
except: 
    yield " Failed to get data from base<br/>" 

Где год переменную INT питона. Я получаю правильные результаты с:

curs.execute('SELECT id,sing_name,bir_yr FROM singers_list) 

Это означает, что я успешно соединяюсь с базой данных. Как включить переменные в запросы? (не только целые, но строки тоже или любой тип)

ответ

3

Вы должны передать параметры внутри итератора - общ кортеж:

query = 'SELECT id,sing_name,bir_yr FROM singers_list WHERE bir_yr = %s' 
curs.execute(query, (year,)) 

Обратите внимание, что я также заменил ? заполнитель %s.

Также обратите внимание, что драйвер MySQL автоматически обрабатывает преобразование типа между Python и MySQL, при необходимости ставит кавычки и избегает параметров, чтобы защитить вас от атак SQL-инъекций.

+0

Не использует '?' Своего рода стандарт и используется всем, кроме PyMySql? – jlh

+0

@jlh Я на самом деле думаю, что это наоборот :) Во всяком случае, я обычно просто обращаюсь к документации драйвера о синтаксисе параметризации. Спасибо, хороший вопрос. – alecxe

Смежные вопросы