Подстановка строки Python для динамического имени столбца и значений

У меня есть следующий запрос для получения данных из PostgreSQL.

select_stmt = "SELECT * FROM kart_user WHERE token = %(token)s"
cursor.execute(select_stmt, { 'token': 2 })

В некоторых случаях словарь может содержать несколько ключей и значений
Например-

{ 'token': 10,'custid':100,cycle:"yes" }

В этом случае, как я могу динамически указать имя столбца и его значения?

Я пытался..

select_stmt = "SELECT * FROM kart_user WHERE dist.keys() = %(dist.keys())s"
cursor.execute(select_stmt, dist)

Но не повезло. Благодарю за ваш ответ..

1 ответ

Решение

В соответствии с вашим проверенным оператором, я предполагаю, что у вас есть три ключа и три значения, поэтому вы хотите выполнить оператор SELECT для всех трех по одному. Ниже решение поможет вам.

d = { 'token': 10,'custid':100,cycle:"yes" }
select_stmt = "SELECT * FROM kart_user WHERE {key} = '{value}'"
allowed_col = ['token', 'custid'] # Predefined column names to allow from coming dictionary.
for key, value in d.iteritems():
    if  key in allowed_col:
        select_stmt = select_stmt.format(key=key, value=value)
        cursor.execute(select_stmt, dist)
        # Further fetching code you can execute. Here you will get select statement for particular key and value.

@ Для и условия

d = { 'token': 10,'custid':100,'cycle':"yes" }
select_stmt = "SELECT * FROM kart_user WHERE"
allowed_col = ['token', 'custid'] # Predefined column names to allow from coming dictionary.
for key, value in d.iteritems():
    if  key in allowed_col:
        condition = "{key} = '{value}'".format(key=key, value=value)
        select_stmt = select_stmt + " and " + condition
cursor.execute(select_stmt, dist)
# Further fetching code you can execute. Here you will get select statement for particular key and value.

Одно линейное решение для вышеуказанного ответа,

d = { 'token': 10,'custid':100,'cycle':"yes" }
condition = ' and '.join([key+'="'+str(value)+'"' for key,value in d.iteritems() if key in allowed_col])
select_stmt = "SELECT * FROM kart_user WHERE"
select_stmt = " ".join([select_stmt, condition])
cursor.execute(select_stmt, dist)
# Further fetching code you can execute. Here you will get select statement for particular key and value.

Если ваш запрос отличается от того, что я ответил, то ответьте на это. Благодарю.

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