2017-02-11 63 views
0

數據庫副本我沒有意識到,正在偵聽默認端口5432,這是插入發生的地方。我應該通過我想要連接的數據庫的自定義端口。Psycopg2插入未保存


的東西,我認爲可能是顯著:從使用fetchall返回ID()是實際上直接從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,)] 

具有相同的憑據連接,在同一臺機器到DB:

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

如果你使用'returned *'而不是''返回id',該怎麼辦? –

+0

它返回正確的,完整的對象,但仍然不在數據庫中。我將徹底改變問題文本,所以它會有一個更簡單的例子。 – Giannis

回答

1

它看起來像你沒有提交交易。在連接關閉之前撥打conn.commit()

+0

我以爲這是從上下文管理器完成的,請仔細檢查。 – Giannis

+0

上下文管理器正在處理它http://initd.org/psycopg/docs/usage.html#with-statement – Giannis

+0

對不起......我甚至去親自檢查那個頁面。顯然讀得太快了。 – hoyland