у меня есть пример шаблона запроса для принятия динамических параметров для выполнения:
ps_conn = psycopg2.connect(...)
ps_cursor = ps_conn.cursor()
ps_cursor.execute('''
SELECT *
FROM "posts"
) ORDER BY "posts"."rate" %s, "posts"."date_created" ASC LIMIT 1
''', ["DESC"])
как вы можете видеть, я хочу передать DESC динамически, чтобы упорядочить результаты, но приведенный выше код продолжает выдавать ошибку InvalidSchemaName
schema "posts" does not exist LINE 11:) ORDER BY "posts"."rate" 'DESC',
он передает DESC как «DESC» в sql.
есть мнение, как выполнить эту функцию, чтобы я мог динамически передавать тип заказа?
Обновите свой запрос следующим образом и попробуйте:
ps_cursor.execute('''
SELECT *
FROM "posts"
) ORDER BY "posts"."rate" {0}, "posts"."date_created" ASC LIMIT 1
'''.format("DESC"))
Вместо этого я бы создал отдельную переменную и код следующим образом:
ps_conn = psycopg2.connect(...)
ps_cursor = ps_conn.cursor()
# you may add a condition to use DESC or not
dynamic_sort = 'DESC'
ps_cursor.execute('''SELECT *
FROM posts
ORDER BY rate %s, date_created ASC
LIMIT 1''',
(dynamic_sort))
ps_conn = psycopg2.connect(...)
ps_cursor = ps_conn.cursor()
ps_cursor.execute('''
SELECT *
FROM "posts"
ORDER BY "posts"."rate" {order}, "posts"."date_created" ASC LIMIT %s
'''.format(order='desc'),(1,))
да, я понял, что когда мы используем форматирование строки, переданная строка не будет заключена в кавычки.