обновление базы данных Posgre SQL через SQLalchemy; ошибка синтаксиса - PullRequest
0 голосов
/ 09 июля 2020

У меня есть две таблицы в базе данных PostgreSQL; таблица1, таблица2. Оба они содержат столбец id. Я хочу добавить столбец из таблицы 2, скажем, col1, в таблицу 1, где table1.id = table2.id.

Я пытаюсь расставить точки через SQLalchemy. Я получаю следующую ошибку:

sqlalchemy.exc.ProgrammingError: (psycopg2.errors.SyntaxError) syntax error at or near "INNER"

Вот фрагмент кода:

engine = create_engine(...)

with engine.connect() as con:
   con.execute("ALTER TABLE table1 ADD COLUMN col1 text")
   con.execute("UPDATE table1  \
                INNER JOIN table2 ON table1.id = table2.id \
                SET table1.col1 = table2.col1")

Почему я получаю эту ошибку?

Ответы [ 4 ]

1 голос
/ 09 июля 2020

PostgreSQL не поддерживает UPDATE...JOIN, например MySQL и MS Access. Однако Postgres поддерживает UPDATE...FROM даже UPDATE...FROM...JOIN:

con.execute("""UPDATE table1 t1
               SET col1 = t2.col1
               FROM table2 t2
               WHERE t1.id = t2.id""")
0 голосов
/ 09 июля 2020

Это неправильный синтаксис для update. См. https://www.postgresql.org/docs/current/sql-update.html

update table1
   set col1 = table2.col1
  from table2
 where table2.id = table1.id;
0 голосов
/ 09 июля 2020

правильный синтаксис для обновления с другой таблицей в postgresql:

 UPDATE table1 
 set table1.col1 = table2.col1
 FROM table2 
 where  table1.id = table2.id
0 голосов
/ 09 июля 2020

У вас не может быть соединений напрямую при обновлении в postgres, и способ, которым вы присоединились, неверен. Пожалуйста, используйте запрос ниже:

update table1 set table1.col1 = qry.col1
from
(select col1 from table2) qry
where 
table1.id = table2.qry;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...