![](/img/trans.png)
[英]Connecting to PostgreSQL database through SSH tunneling in Python
[英]Connecting to postgresql through python
作為一個更大項目的一部分,我正在嘗試自動創建 PostgreSQL 數據庫和用戶,並為他們分配在 Ubuntu 上運行的角色。 我已經弄清楚如何創建數據庫,並且 psycopg2 是我想要連接到它的問題,我似乎無法找到連接到數據庫的方法。 如果我使用命令
sudo -u postgres bash
psql testBase
我可以訪問數據庫並手動設置規則。 據我所知,postgres 用戶沒有默認密碼,它使用其他類型的身份驗證
os.system("sudo -H -u postgres bash -c 'createuser -DRS test2'")
os.system("sudo -H -u postgres bash -c 'createdb -O test2 testBase'")
conn = psycopg2.connect(database="testBase", user="test2", host="127.0.0.1")
創建數據庫和用戶,然后我得到結果
Traceback (most recent call last):
File "test2.py", line 7, in <module>
conn = psycopg2.connect(database="testBase", user="test2", host="127.0.0.1")
File "/home/openvas/.local/lib/python3.6/site-packages/psycopg2/__init__.py", line 127, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: fe_sendauth: no password supplied
我建議以下場景:
psql_dumpall
創建“模板”(也是一次性工作) 由於psql_dumpall
轉儲了整個數據庫實例,因此在加載轉儲后,您也可以使用角色登錄。 只需在您的代碼中添加密碼更改,對 go 應該很好。
Postgresql 通過 Unix 域套接字提供無密碼連接。 要使用 psycopg2 獲得此行為,請在調用連接構造函數時省略host
參數。
conn = psycopg2.connect(database="testBase", user="test2")
如果您想使用受密碼保護的連接,您需要編輯pg_hba.conf
文件以添加如下行(選擇 IPv4/IPv6):
# TYPE DATABASE USER ADDRESS METHOD
# IPv4 local connections:
host testBase test2 127.0.0.1/32 md5
# IPv6 local connections:
host testBase test2 ::1/128 md5
pg_hba.conf
文件包括每一列的描述。
如果你想從不同的主機連接,你需要設置
listen_addresses = '*'
在postgresql.conf
文件中(並對防火牆進行任何必要的更改)。
更改配置文件后重新啟動/重新加載 postgresql 服務。
正如 jjanes 的評論所表明的那樣,似乎pg_hba.conf
已經配置為密碼身份驗證,因此您需要決定是通過 unix 套接字無密碼連接還是通過 tcp/ip 使用用戶/密碼組合。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.