Psycopg 2.7 無責(zé)任翻譯

Psycopg - PostgreSQL database adapter for Python

基本模塊用法

Psycopg 的基本用法共同于所有遵循 DB API 2.0 協(xié)議實(shí)現(xiàn)的數(shù)據(jù)庫適配器

Passing parameters to SQL queries

對(duì)于我來說這是最重要的一部分內(nèi)容

Psycopg 根據(jù) Python 變量的類型將變量轉(zhuǎn)換為 SQL 值丑掺。Python 類型確定了用于將對(duì)象轉(zhuǎn)換為與 Postgresql 相匹配的字符串的函數(shù)。大部分標(biāo)準(zhǔn) Python 類型已經(jīng)適配了正確的 SQL 表達(dá)勿决。

傳遞參數(shù)給 SQL 語句發(fā)生在如 cursor.execute() 這樣的函數(shù)中迟杂,其通過在 SQL 語句中使用 %s 占位符并在函數(shù)的第二個(gè)參數(shù)中傳遞值序列泞边。

命名參數(shù)也是支持的拖陆,在查詢中使用 %(name)s 占位符并在映射中指定值咪辱。使用命名參數(shù)允許以任意的次序指定值妇斤,也允許同一值在查詢的幾個(gè)位置重復(fù)栗涂。

命名參數(shù)其名中不能包含 %, (, ) 三字符碰酝。

在使用參數(shù)的查詢中,為了使用 % 字面量戴差,可以使用 %% 串送爸。

Transactions control 事務(wù)控制

Psycopg 中事務(wù)由 connection 類控制。缺省情況下暖释,當(dāng)首次將一個(gè)命令發(fā)送到數(shù)據(jù)庫時(shí)袭厂,一個(gè)新的事務(wù)被創(chuàng)建。其后的命令將在同一個(gè)事務(wù)環(huán)境中執(zhí)行 - 不僅是第一個(gè) cursor 發(fā)出的命令球匕,而且是由同一個(gè)連接創(chuàng)建的所有 cursor 都如此纹磺。可能任一命令失敗亮曹,事務(wù)即中斷橄杨,后續(xù)命令停止運(yùn)行秘症,直到 rollback() 方法被調(diào)用。

connection 負(fù)責(zé)了結(jié)其事務(wù)式矫,通過調(diào)用 commit() 或 rollback() 方法乡摹。變更即刻持久化于庫中。關(guān)閉連接使用 closer() 方法或刪除連接對(duì)象采转,(使用 del 或 使其 fall out of scope )將導(dǎo)致隱式 rollback 聪廉。

connection 可被設(shè)置為 autocommit 模式:這樣所有執(zhí)行的命令將立即確認(rèn),不能回滾故慈。有幾個(gè)命令板熊,如 CREATE DATABASE, VACUUM 等需要運(yùn)行在事務(wù)之外。為了能夠從 Psycopg 運(yùn)行這些命令察绷,connection 必須在 autocommit 態(tài)干签。可以使用 autocommit 屬性拆撼。

告誡:缺省情況下容劳,即使一個(gè)簡(jiǎn)單的 SELECT 也會(huì)啟動(dòng)一個(gè)事務(wù)。在長(zhǎng)時(shí)間運(yùn)行的程序中情萤,如果沒有進(jìn)一步的動(dòng)作,會(huì)話將被保持摹恨,即“在連接中發(fā)呆”筋岛,因?yàn)閹讉€(gè)原因這種狀態(tài)是不受待見的(會(huì)話保持鎖,表爆炸)晒哄。對(duì)于長(zhǎng)期存在的腳本睁宰,請(qǐng)確保盡快終止事務(wù)或使用自動(dòng)提交連接。

還有幾個(gè)事務(wù)屬性能夠設(shè)置會(huì)話范圍寝凌。詳見 set_seesion()

SQL string composition

模塊包含著以一種安全便捷的方式動(dòng)態(tài)生成 SQL 的對(duì)象和方法柒傻。SQL 標(biāo)識(shí)符,如:表名较木,字段名 不能像查詢參數(shù)那樣傳遞給 execute() 方法红符。SQL 查詢應(yīng)在參數(shù)合并之前構(gòu)成。

class psycopg2.sql.Composable(wrapped)
可被用于組成 SQL 字符串的對(duì)象的抽象基類伐债。

Composable 對(duì)象可被直接傳入 execute(), executemany(), copy_expert() 预侯,占用查詢串的位置。

Composable 對(duì)象可以使用操作符 + 連接:結(jié)果為包含連接對(duì)象的 Composed 實(shí)例峰锁。Composable 對(duì)象也支持操作符 * : 結(jié)果為包含重復(fù)請(qǐng)求次數(shù)左參的 Composed 實(shí)例萎馅。

```
query = sql.SQL("select {0} from {1}").format(
    sql.SQL(', ').join([sql.Identifier('foo'), sql.Identifier('bar']),
    sql.Identifier('table'))
    
# select "foo", "bar" from "table"
```
class psycopg2.sql.SQL(string)
Composable 表示一段 SQL 語句。

SQL 暴露了 join() 與 format() 方法幫助合并查詢的變量部分虹蒋,創(chuàng)建模板糜芳。

參數(shù) string 不接受任何形式的逃逸飒货,所以 SQL 不適合表示變量、標(biāo)識(shí)符或值:應(yīng)該僅被用于傳遞常量字符串表示模板或 SQL 語句段峭竣,使用其它對(duì)象如 Identifier 或 Literal 表示變量部分塘辅。
class psycopg2.sql.Placeholder(name=None)

將一個(gè) Composable 對(duì)象表示為查詢參數(shù)占位符。

如果指定 name 則生成命名占位符邪驮,否則生成位置占位符莫辨。

對(duì)象用于生成帶有數(shù)個(gè)參數(shù)變量的 SQL 查詢。

例子:

names = ['foo', 'bar', 'baz']

q1 = sql.SQL("insert into table ( {} ) values ({}) ")
        .format(
            sql.SQL('.').join( map( sql.Identifier, names ) ),
            sql.SQL('.').join( sql.Placeholder() * len( names ) )
        )

# insert into table ("foo", "bar", "baz") values (%s, %s, %s)

q2 = sql.SQL("insert into table ( {} ) values ({}) ")
        .format(
            sql.SQL('.').join( map( sql.Identifier, names ) ),
            sql.SQL('.').join( map( sql.Placeholder, names ) )
        )
        
# insert into table ("foo", "bar", "baz") values (%(foo)s, %(bar)s, %(baz)s)

name
The name of the Placeholder.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末毅访,一起剝皮案震驚了整個(gè)濱河市沮榜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌喻粹,老刑警劉巖蟆融,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異守呜,居然都是意外死亡型酥,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門查乒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來弥喉,“玉大人,你說我怎么就攤上這事玛迄∮删常” “怎么了?”我有些...
    開封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵蓖议,是天一觀的道長(zhǎng)虏杰。 經(jīng)常有香客問我,道長(zhǎng)勒虾,這世上最難降的妖魔是什么纺阔? 我笑而不...
    開封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮修然,結(jié)果婚禮上笛钝,老公的妹妹穿的比我還像新娘。我一直安慰自己愕宋,他們只是感情好婆翔,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著掏婶,像睡著了一般啃奴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上雄妥,一...
    開封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天最蕾,我揣著相機(jī)與錄音依溯,去河邊找鬼。 笑死瘟则,一個(gè)胖子當(dāng)著我的面吹牛黎炉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播醋拧,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼慷嗜,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了丹壕?” 一聲冷哼從身側(cè)響起庆械,我...
    開封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎菌赖,沒想到半個(gè)月后缭乘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡琉用,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年堕绩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片邑时。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡奴紧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出晶丘,到底是詐尸還是另有隱情黍氮,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布铣口,位于F島的核電站滤钱,受9級(jí)特大地震影響觉壶,放射性物質(zhì)發(fā)生泄漏脑题。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一铜靶、第九天 我趴在偏房一處隱蔽的房頂上張望叔遂。 院中可真熱鬧,春花似錦争剿、人聲如沸已艰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽哩掺。三九已至,卻和暖如春涩笤,著一層夾襖步出監(jiān)牢的瞬間嚼吞,已是汗流浹背盒件。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留舱禽,地道東北人炒刁。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像誊稚,于是被迫代替她去往敵國和親翔始。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 1. 簡(jiǎn)介 1.1 什么是 MyBatis 里伯? MyBatis 是支持定制化 SQL城瞎、存儲(chǔ)過程以及高級(jí)映射的優(yōu)秀的...
    笨鳥慢飛閱讀 5,452評(píng)論 0 4
  • 轉(zhuǎn)載,覺得這篇寫 SQLAlchemy Core俏脊,寫得非常不錯(cuò)全谤。不過后續(xù)他沒寫SQLAlchemy ORM... ...
    非夢(mèng)nj閱讀 5,377評(píng)論 1 14
  • 胡自強(qiáng) 愛自己是學(xué)習(xí)心理學(xué)走上心靈成長(zhǎng)道路的第一個(gè)階段。 很多朋友參加各種課程和體驗(yàn)爷贫, 老師主要講的也是愛自己的內(nèi)...
    想文藝文藝不起來的青年閱讀 313評(píng)論 0 0
  • 文 | 飄揚(yáng)的鵝毛 手術(shù)室里认然。 滋啦、滋啦的聲音飄蕩在空氣里漫萄。 半分鐘前麻醉師在我背后的大椎上不聲不響地打了一針卷员,...
    飄揚(yáng)的鵝毛閱讀 574評(píng)論 13 13
  • 文:山山 從醫(yī)科大第一附屬醫(yī)院出來,我準(zhǔn)備去鐵路局匯嘉時(shí)代腾务,發(fā)現(xiàn)公交車站人山人海毕骡,想想真是嚴(yán)寒也阻擋不了人們對(duì)健康...
    11山山閱讀 1,608評(píng)論 38 68