日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python postgresql跨数据库查询_python访问PostgreSQL数据库之连接库Psycopg2

發(fā)布時(shí)間:2023/12/10 python 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python postgresql跨数据库查询_python访问PostgreSQL数据库之连接库Psycopg2 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。