Форматированный запрос sql не работает в python

мой код:

engine = sqlalchemy.create_engine("credentials")
connection = engine.connect()

day = 180601
query = "select * from Data where Name like '%{0}%'".format(str(day))
df = pd.DataFrame(connection.execute(query).fetchall())

но это не работает. когда я печатаю:

query =  "select * from Data where Name like '%180601%'" 

затем повторите тот же процесс, это работает нормально, хотя они производят одинаковые запросы. Я хочу изменить дни в цикле for.

Любые идеи были бы хорошы. Заранее спасибо!

Если вы поместите все содержимое запроса в одну строку, это сработает? Я говорю это, потому что в первом "%" у вас есть разрыв строки ...

João Martins 24.07.2018 16:01

Я на самом деле не использовал python (и когда я использовал это было около года назад в качестве введения), но, если я правильно помню, разве вам не нужно тройной кавычки (""") многострочной строки в Python?

Larnu 24.07.2018 16:01

привет Жоао, на самом деле они находятся в одной строке в моем файле.

tepeal 24.07.2018 16:03

@tepeal, тогда убедитесь, что ваш пост выглядит точно так же, как ваш файл. Я отредактировал ваше сообщение, чтобы удалить перенос строки, если вы говорите, что его на самом деле нет в вашем коде.

Larnu 24.07.2018 16:11

@Larnu спасибо. Я здесь новичок.

tepeal 24.07.2018 16:15

Обратите внимание, что это вообще плохая идея. Вы не должны использовать строковое форматирование для передачи значений в запросы. Если вы сделаете это привычкой, однажды вы окажетесь не на том конце SQL-инъекции. Обычно использование подходящих заполнителей также намного проще, поскольку драйвер обрабатывает цитирование и т. д. За вас.

Ilja Everilä 24.07.2018 16:39

Вот пример того, как вы должны передавать строку поиска: stackoverflow.com/questions/39488380/…

Ilja Everilä 24.07.2018 16:46
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
7
127
1

Ответы 1

Я обнаружил, что с самим питоном проблем нет. Проблема в том, что sql не может получить первые 100 строк без предложения order by. Я думаю, что это еще одна ошибка, но добавление «order by col1» в конце запроса решило проблему.

Спасибо за ваше время.

@tepeal мне все это кажется очень необычным. Что вы видите при удалении ORDER BY CLAUSE для вопроса «упорядочить по»? Есть ли исключение python или вы просто получаете пустой набор результатов? Не могли бы вы инициализировать движок с помощью echo = True и сравнить полученные операторы sql?

Pablo Henkowski 24.07.2018 21:04

@PabloHenkowski Я пытаюсь получить около 200 тыс. Строк из таблицы размером 5 м. Без предложения order by sql пытается выполнить запрос, но это занимает очень много времени, и я прерываюсь. Я думаю, что sql не может решить, какие первые 100 строк отображать. :) Когда я добавляю предложение order by, он сразу возвращает результат. Для меня это тоже звучит странно, но дело обстоит именно так.

tepeal 24.07.2018 22:19

Другие вопросы по теме