2016-10-18 2 views
2
with engine.connect() as con: 

    rs = con.execute(""" 
         SELECT datediff(STR_TO_DATE(CONCAT(year,'-',month,'-',day), '%Y-%m-%d') , current_date()) 
         from TABLE 
         WHERE datediff(STR_TO_DATE(CONCAT(year,'-',month,'-',day), '%Y-%m-%d') , current_date()) < 900 
         group by STR_TO_DATE(CONCAT(year,'-',month,'-',day), '%Y-%m-%d'); 
        """) 

Я чувствую, что компилятор запутывается с '% Y-% m-% d', я могу ошибаться. Может кто-нибудь помочь мне о том, как избежать этой ошибки:TypeError: недостаточно аргументов для строки формата - соединение с Python SQL при использовании% Y-% m

Type Error:not enough arguments for format string

+0

Что вы используете для подключения к базе данных mysql? Какой пакет? Вы можете объяснить, что вы пытаетесь выполнить с помощью вашего запроса. – wwii

+0

с использованием sqlalchemy и с использованием MySQL Workbench – ForeverLearner

ответ

3

Он видит ваши % признаки и думает, что вы хотите форматировать строку. Я считаю, что вы должны заменить их %%, чтобы указать, что вы хотите использовать символ, а не замену формата.

+0

Да, это работает! Большое спасибо! – ForeverLearner

0

Вам нужно бежать %:

with engine.connect() as con: 

    rs = con.execute(""" 
         SELECT datediff(STR_TO_DATE(CONCAT(year,'-',month,'-',day), '%%Y-%%m-%%d') , current_date()) 
         from TABLE 
         WHERE datediff(STR_TO_DATE(CONCAT(year,'-',month,'-',day), '%%Y-%%m-%%d') , current_date()) < 900 
         group by STR_TO_DATE(CONCAT(year,'-',month,'-',day), '%%Y-%%m-%%d'); 
        """) 

% является зарезервированным символ в MySQL (подстановочные).

+0

Да, это работает! Большое спасибо! – ForeverLearner