Разница между% () s и {} в python 3.6 с postgres

Мне было интересно, может ли кто-нибудь объяснить мне, почему ...

это не работает там, где я использую этот стиль форматирования Python% () s для обеих переменных:

some_column = column
some_id = id

db.execute(
    f"""
    SELECT %(some_column)s
    FROM schema.table_name
    WHERE id = %(some_id)s
    """,
    {
        "some_column": some_column,
        "some_id": some_id,
    }
)

но это работает, когда я использую форматирование {} для столбца и форматирование% () s для предложения where:

some_column = column
some_id = id

db.execute(
    f"""
    SELECT {some_column}
    FROM schema.table_name
    WHERE id = %(some_id)s
    """,
    {
        "some_column": some_column,
        "some_id": some_id,
    }
)

вы можете добавить фрагмент, в котором вы заменяете значения? или вы должны это проверить realpython.com/python-f-strings

utks009 10.08.2018 15:57
initd.org/psycopg/docs/…
taras 10.08.2018 15:57

Вопрос неполный для нас советом. Не могли бы вы сослаться на ссылку на используемую вами библиотеку? Кроме того, какие значения some_column / some_id выдают ошибку?

BPL 10.08.2018 16:04

Я предполагаю, что синтаксис% s неверен. Если вы внимательно присмотритесь, при передаче параметров в строку вам также необходимо передать%, которого нет. Поправьте, если ошибаюсь.

reetesh11 10.08.2018 16:10
2
4
905
1

Ответы 1

Новые строки python3.6 f используют {} внутри строки, которая должна быть заменена на время выполнения поэтому, если вы хотите использовать строки f, ваш код должен быть

some_column = column
some_id = id

db.execute(
    f"""
    SELECT {some_column}
    FROM schema.table_name
    WHERE id = {some_id}
    """)

то есть строка будет оценивать код внутри {} и заменять его значениями переменных.

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