python postgresql跨数据库查询_python访问PostgreSQL数据库之连接库Psycopg2
python訪問PostgreSQL數(shù)據(jù)庫之連接庫Psycopg2
作者:傭工7001
由于要在python訪問PostgreSQL數(shù)據(jù)庫,需要一個(gè)符合DB-API的連接庫。通過搜索,鎖定兩個(gè)候選庫:一個(gè)是py-postgresql,一個(gè)是Psycopg2。簡單的看了一下py-postgresql的文檔,發(fā)現(xiàn)它并非基于DB-api接口的,而是使用postgresql的API,這可不是我想要的,只好排除。剩下就是這個(gè)名字很怪異的Psycopg,看了下,它遵循DB-API規(guī)范,好了就選它了,下載安裝,試用,老規(guī)矩,記錄下來要點(diǎn)備忘。
一、安裝
由于我開發(fā)環(huán)境在windows下,所以我下載的是window下的一鍵安裝版本,安裝過程非常容易沒啥可說的。
二、使用
面的簡單使用流程是官網(wǎng)的文檔中的例子,看上去是這么的熟悉,是個(gè)不錯(cuò)的開始。
# 引入psycopg2庫
>>> import psycopg2
# 連接到數(shù)據(jù)庫test
>>> conn = psycopg2.connect("dbname=test user=postgres")
# 建立Cursor對象
>>> cur = conn.cursor()
# 執(zhí)行sql命令:創(chuàng)建一個(gè)新表test
>>> cur.execute("CREATE TABLE test (id serial PRIMARY KEY, num integer, data varchar);")
# 傳遞數(shù)據(jù)到語句中形參中,讓Psycopg處理正確的轉(zhuǎn)換問題(可以避免sql注入)
>>> cur.execute("INSERT INTO test (num, data) VALUES (%s, %s)",
... (100, "abc'def"))
# 插敘數(shù)據(jù),并獲取結(jié)果
>>> cur.execute("SELECT * FROM test;")
>>> cur.fetchone()
(1, 100, "abc'def")
# 提交數(shù)據(jù)改變
>>> conn.commit()
# 關(guān)閉Cursor對象和連接對象
>>> cur.close()
>>> conn.close()
下面就要看psycopg是否能完全滿足我的需求:
(-)建立數(shù)據(jù)庫連接psycopg2中建立數(shù)據(jù)庫連接需要使用connect方法,方法形式如下:psycopg2.connect(dsn or params [, connection_factory] [, async=0])
返回值是一個(gè)Connection對象。1,可以使用DSN連接數(shù)據(jù)庫,也就是數(shù)據(jù)源名稱字符串,例如conn = psycopg2.connect("dbname=test user=postgres password=secret")2,也可以使用命名參數(shù)進(jìn)行連接。conn = psycopg2.connect(database="test", user="postgres", password="secret")
基本的連接參數(shù)有:
dbname – 數(shù)據(jù)庫名(僅在DSN中使用有效)
database – 數(shù)據(jù)庫名(僅在使用命名參數(shù)時(shí)可用)
user – 連接數(shù)據(jù)所用的數(shù)據(jù)庫用戶名
password – 用戶的密碼
host – 數(shù)據(jù)庫所在主機(jī)名或IP地址(默認(rèn)為本機(jī))
port – 端口號(默認(rèn)為5432 )
還有其他一些參數(shù),請參見PostgreSQL官方文檔 list of supported parameters。另外需要注意的是,同樣的參數(shù)也可以通過環(huán)境變量的形式傳遞到客戶端庫。
3,使用connection_factory參數(shù),可以指定自定義的Connection連接類,詳情查看官方文檔 Connection and cursor factories 。
4,設(shè)置參數(shù)async=1,則會創(chuàng)建一個(gè)異步的連接對象。具體參見官方文檔Asynchronous support 了解異步的優(yōu)缺點(diǎn)。
(二)創(chuàng)建字典形式的Cursor對象
簡單的創(chuàng)建Cursor對象十分簡單,但是這不能滿足我的需求。DictCursor這個(gè)才是我所需要的,也就是在創(chuàng)建Cursor的時(shí)候給出參數(shù)cursor_factory
import psycopg2
#為了使用DictCursor
import psycopg2.extrascursor = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)使用過dbapi編程的,這個(gè)好處你懂的
(三)使用命名參數(shù)傳遞數(shù)據(jù)
我的另一個(gè)需求就是,執(zhí)行sql語句時(shí),最好使用命名參數(shù)傳遞數(shù)據(jù),幸運(yùn)的是psycopg2也是支持命名參數(shù)的!psycopg中命名參數(shù)的形式是:【%(argname)s】,注意在中括號中的內(nèi)容就是命名參數(shù)要求的形式,其中argname是你起的參數(shù)名稱,其他的百分號小括號以及小括號后面的s,照寫就是。
使用命名參數(shù)的好處就是,你不用考慮傳遞數(shù)據(jù)的順序,可以使用字典傳遞數(shù)據(jù)(注意字典的key,應(yīng)該等于上面所說的argname):
>>> cur.execute(
... """INSERT INTO some_table (an_int, a_date, another_date, a_string)
... VALUES (%(int)s, %(date)s, %(date)s, %(str)s);""",
... {'int': 10, 'str': "O'Reilly", 'date': datetime.date(2005, 11, 18)})
總結(jié)
以上是生活随笔為你收集整理的python postgresql跨数据库查询_python访问PostgreSQL数据库之连接库Psycopg2的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 重锤痛击 robocode!
- 下一篇: 太极图python自定义函数绘制_[宜配