query = SELECT id (...), возвращающий весь запрос - PullRequest
0 голосов
/ 19 декабря 2018

Я создаю скрипт для получения данных из API и сохранения в базе данных Postgresql.когда я пытаюсь выбрать id, используя SELECT id FROM (...) и сохранить в запросе, он возвращает мне весь SELECT, а не значение идентификатора.

count = ("""
        SELECT COUNT(name) 
        FROM cinema 
        WHERE name = %s;
        """,
        (cinema_name)
    )

    if count == 0:
        query = ("""
            INSERT INTO cinema
            VALUES (%s, %s, %s, %s, %s); 
            """
        )
        data = (cinema_id, cinema_name, cinema_is_active, cinema_created_at, cinema_updated_at)
        cur.execute(query, data)
        conn.commit()
        theater_cinema_id = cinema_id
        cinema_id += 1
    else:
        query = ("""
            SELECT id
            FROM cinema
            WHERE name = %s;
            """,
            (cinema_name)
        )
        cinema_id = query
        theater_cinema_id = cinema_id
    #

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

Postgresql Log

2018-12-19 19:26:14.401 UTC [75] ERROR:  column "cinema_id" is of type integer but expression is of type record at character 39
2018-12-19 19:26:14.401 UTC [75] HINT:  You will need to rewrite or cast the expression.
2018-12-19 19:26:14.401 UTC [75] STATEMENT:  
            INSERT INTO theater
            VALUES (5, ('
                SELECT id
                FROM cinema
                WHERE name = %s;
                ', 'Cinemark'), 'Ingresso','4'); 

1 Ответ

0 голосов
/ 19 декабря 2018

Вы должны сначала найти кинотеатр, прежде чем фактически заполнить свой theater_cinema_id.

# Query the cinema ID
cur.execute("""
    SELECT id 
    FROM table 
    WHERE name = %s;
    """,
    (cinema_name)
)

cinema = cur.fetchone()

# Checks if a cinema was found
if cinema:
     # Cinema exists
     theater_cinema_id = cinema[0]
else:
   # Otherwise create the cinema
   cur.execute("""
        INSERT INTO cinema
        VALUES (%s, %s, %s, %s, %s)
        """,
        (cinema_id, cinema_name, cinema_is_active, cinema_created_at, cinema_updated_at)
   )
   theater_cinema_id = cinema_id
   cinema_id += 1

# Add any additional inserts / updates then commit towards the end  
conn.commit()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...