2017-02-11 4 views
0

Копия базы данных, о которой я не знал, слушал порт 5432 по умолчанию, в котором происходили вставки. Мне нужно передать пользовательский порт для базы данных, к которой я должен был подключиться.Вставка Psycopg2 не сохранена


то, что я думаю, что может быть существенным: идентификатор, возвращаемый из fetchall() отличается от того, на самом деле, вставленной непосредственно из PSQL.

Сценарий я выполняю:

import os 
import psycopg2 

conn_config = { 
    'host': os.environ['DB_HOST'], 
    'dbname': os.environ['DB_NAME'], 
    'user': os.environ['DB_USER'], 
    'password': os.environ['DB_PASSWD'] 
} 
conn = psycopg2.connect(**conn_config) 
cur = conn.cursor() 
sql = """INSERT INTO file(file_title, file_descrip) VALUES ('test','giannis') RETURNING file_id;""" 
cur.execute(sql) 
print(cur.fetchall()) 
conn.commit() 
cur.close() 
conn.close() 

Выход:

>>>[(76,)] 

Подключение с теми же учетными данными, с одной и той же машине к БД:

select * from file where file.file_id=76; 
file_id | file_title | file_stream | file_descrip | obj_uuid 
---------+------------+-------------+--------------+---------- 
(0 rows) 

И из того же сессия в psql, копирование приведенного выше оператора SQL:

INSERT INTO file(file_title, file_descrip) VALUES ('test','giannis') RETURNING file_id; 
file_id 
--------- 
     57 
(1 row) 

INSERT 0 1 
my_db=> select * from file where file.file_id=57; 
-[ RECORD 1 ]+------------------------------------- 
file_id  | 57 
file_title | test 
file_stream | 
file_descrip | giannis 
obj_uuid  | 396d5d3b-efe1-422a-a6b4-d9b21381d4be 
+0

Что делать, если вы возвращаете * 'вместо' return id'? –

+0

Возвращает правильный, полный объект, но все же не находится в БД. Я полностью изменю текст вопроса, поэтому у него будет гораздо более простой пример. – Giannis

ответ

1

Похоже, вы не совершаете транзакцию. Вызовите conn.commit(), прежде чем соединение закроется.

+0

Я думал, что это делается из контекстного менеджера, будет проверять дважды. – Giannis

+0

менеджер контекста обрабатывает его http://initd.org/psycopg/docs/usage.html#with-statement – Giannis

+0

Извините ... Я даже сам проверил эту страницу. Чтение слишком быстро, по-видимому. – hoyland

Смежные вопросы