Вопрос о синтаксисе при попытке использовать переменную Python в PostgresSQL SELECT - PullRequest
0 голосов
/ 24 октября 2018

Я новичок в Python.Хотя это похоже на предыдущий вопрос, который я задал - сейчас я ищу некоторую информацию конкретно о синтаксисе.Я настроил следующий тест ниже, чтобы попытаться взять число из запроса и передать его в другой запрос.Конкретная проблема, с которой я сталкиваюсь, связана со строкой "cursor.execute (« ВЫБЕРИТЕ текст ИЗ ЛИЦА, ГДЕ id = »+ str (rows))»Я получаю синтаксические ошибки.

Когда я печатаю запрос в Python, запись отображается в круглых скобках с запятой после нее, что, как я полагаю, является причиной ошибки (так как эти символы являются неожиданными для следующего запроса).

Будучи новичком в этом вопросе, я задаюсь вопросом, должен ли я использовать «Заменить», чтобы сократить результат до числа без других символов, или я должен что-то сделать по-другому.Как правильно передать это число?

import psycopg2
try:
    connect_str = "dbname='mydatabase' user='myuser' host='localhost' " + \
                  "password='mypassword'"
    # establish a connection
    conn = psycopg2.connect(connect_str)
    # cursor to execute queries
    cursor = conn.cursor()
    # run am initial SELECT statement
    cursor.execute("SELECT result FROM mytable WHERE id=1")
    # assign fetched data to a variable named rows
    rows = cursor.fetchone()
    # for testing purposes, print the variable
    print(rows)
    # for testing purposes, use it in a sentence
    print("the following is your next row",rows)
    # feed the result stored in rows into another query
    cursor.execute("SELECT result FROM mytable WHERE id=" + str(rows))
    morerows = cursor.fetchone()
except Exception as e:
    print("cant connect")
    print(e)

1 Ответ

0 голосов
/ 24 октября 2018

Класс cursor имеет очень полезный метод mogrify(), который можно использовать, чтобы увидеть, как строится запрос.Вы можете попробовать запрос с ним и затем заменить mogrify на execute, чтобы выполнить запрос.

Вы должны внимательно прочитать Передача параметров в запросы SQL в документации.

Несколько примеров:

# pass an integer constant:
print(cursor.mogrify("SELECT result FROM mytable WHERE id= %s", (111, )))

# pass two variables:
a_number = 222
a_string = 'string'
print(cursor.mogrify("SELECT result FROM mytable WHERE id= %s or str = %s", (a_number, a_string)))

#pass a tuple:
args = (333, 'another_string')
print(cursor.mogrify("SELECT result FROM mytable WHERE id= %s or str = %s", args))

Приведенный выше код дает вывод:

b'SELECT result FROM mytable WHERE id= 111'
b"SELECT result FROM mytable WHERE id= 222 or str = 'string'"
b"SELECT result FROM mytable WHERE id= 333 or str = 'another_string'"
...