1、說明
創(chuàng)新互聯(lián)秉承專業(yè)、誠信、服務(wù)、進(jìn)取的價值觀,堅持以客戶為中心、客戶至上的服務(wù)理念,以“關(guān)注企業(yè)需求,實現(xiàn)企業(yè)價值”為導(dǎo)向,努力為企業(yè)提供全面優(yōu)質(zhì)的互聯(lián)網(wǎng)應(yīng)用服務(wù)。服務(wù)包括空間域名、虛擬主機(jī)、企業(yè)郵箱、網(wǎng)站建設(shè)、網(wǎng)站優(yōu)化、網(wǎng)絡(luò)營銷解決方案和咨詢服務(wù),以幫助企業(yè)客戶應(yīng)用互聯(lián)網(wǎng)。
python可以調(diào)用win32的Api,是使用ctypes模塊就可以調(diào)用win32的API函數(shù)。
2、示例代碼
import ctypes
MessageBox = ctypes.windll.user32.MessageBoxW
MessageBox(None, '我是python,我使用了win32 API :)', '提示', 0)
3、執(zhí)行結(jié)果
4、注意事項
要注意函數(shù)使用的參數(shù),如果使用了帶中文的字符串,就是使用api中Unicode的函數(shù),如上例中使用的MessageBoxW,如為純ANSI編碼字符串則直接使用MessageBox即可。
調(diào)用API函數(shù)使用ctypes的windll對象下發(fā)命令可實現(xiàn)調(diào)用API函數(shù)的功能。API是用于構(gòu)建應(yīng)用程序軟件的一組子程序定義,協(xié)議和工具。一般來說,這是一套明確定義的各種軟件組件之間的通信方法。
雖然 Python 需要為操作不同的數(shù)據(jù)庫使用不同的模塊,但不同的數(shù)據(jù)庫模塊并非沒有規(guī)律可循,因為它們基本都遵守 Python 制訂的 DB API 協(xié)議,目前該協(xié)議的最新版本是 2.0,因此這些數(shù)據(jù)庫模塊有很多操作其實都是相同的。下面先介紹不同數(shù)據(jù)庫模塊之間的通用內(nèi)容。
全局變量
Python 推薦支持 DB API 2.0 的數(shù)據(jù)庫模塊都應(yīng)該提供如下 3 個全局變量:
apilevel:該全局變量顯示數(shù)據(jù)庫模塊的 API 版本號。對于支持 DB API 2.0 版本的數(shù)據(jù)庫模塊來說,該變量值通常就是 2.0。如果這個變量不存在,則可能該數(shù)據(jù)庫模塊暫時不支持 DB API 2.0。讀者應(yīng)該考慮選擇使用支持該數(shù)據(jù)庫的其他數(shù)據(jù)庫模塊。
threadsafety:該全局變量指定數(shù)據(jù)庫模塊的線程安全等級,該等級值為 0~3 ,其中 3 代表該模塊完全是線程安全的;1 表示該模塊具有部分線程安全性,線程可以共享該模塊,但不能共享連接;0 則表示線程完全不能共享該模塊。
paramstyle:該全局變量指定當(dāng) SQL 語句需要參數(shù)時,可以使用哪種風(fēng)格的參數(shù)。該變量可能返回如下變量值:
format:表示在 SQL 語句中使用 Python 標(biāo)準(zhǔn)的格式化字符串代表參數(shù)。例如,在程序中需要參數(shù)的地方使用 %s,接下來程序即可為這些參數(shù)指定參數(shù)值。
pyformat:表示在 SQL 語句中使用擴(kuò)展的格式代碼代表參數(shù)。比如使用 %(name),這樣即可使用包含 key 為 name 的字典為該參數(shù)指定參數(shù)值。
qmark:表示在 SQL 語句中使用問號(?)代表參數(shù)。在 SQL 語句中有幾個參數(shù),全部用問號代替。
numeric:表示在 SQL 語句中使用數(shù)字占位符(:N)代表參數(shù)。例如:1 代表一個參數(shù),:2 也表示一個參數(shù),這些數(shù)字相當(dāng)于參數(shù)名,因此它們不一定需要連續(xù)。
named:表示在 SQL 語句中使用命名占位符(:name)代表參數(shù)。例如 :name 代表一個參數(shù),:age 也表示一個參數(shù)。
通過查閱這些全局變量,即可大致了解該數(shù)據(jù)庫 API 模塊的對外的編程風(fēng)格,至于該模塊內(nèi)部的實現(xiàn)細(xì)節(jié),完全由該模塊實現(xiàn)者負(fù)責(zé)提供,通常不需要開發(fā)者關(guān)心。
數(shù)據(jù)庫 API 的核心類
遵守 DB API 2.0 協(xié)議的數(shù)據(jù)庫模塊通常會提供一個 connect() 函數(shù),該函數(shù)用于連接數(shù)據(jù)庫,并返回數(shù)據(jù)庫連接對象。
數(shù)據(jù)庫連接對象通常會具有如下方法和屬性:
cursor(factory=Cursor):打開游標(biāo)。
commit():提交事務(wù)。
rollback():回滾事務(wù)。
close():關(guān)閉數(shù)據(jù)庫連接。
isolation_level:返回或設(shè)置數(shù)據(jù)庫連接中事務(wù)的隔離級別。
in_transaction:判斷當(dāng)前是否處于事務(wù)中。
上面第一個方法可以返回一個游標(biāo)對象,游標(biāo)對象是 Python DB API 的核心對象,該對象主要用于執(zhí)行各種 SQL 語句,包括 DDL、DML、select 查詢語句等。使用游標(biāo)執(zhí)行不同的 SQL 語句返回不同的數(shù)據(jù)。
游標(biāo)對象通常會具有如下方法和屬性:
execute(sql[, parameters]):執(zhí)行 SQL 語句。parameters 參數(shù)用于為 SQL 語句中的參數(shù)指定值。
executemany(sql, seq_of_parameters):重復(fù)執(zhí)行 SQL 語句??梢酝ㄟ^ seq_of_parameters 序列為 SQL 語句中的參數(shù)指定值,該序列有多少個元素,SQL 語句被執(zhí)行多少次。
executescript(sql_script):這不是 DB API 2.0 的標(biāo)準(zhǔn)方法。該方法可以直接執(zhí)行包含多條 SQL 語句的 SQL 腳本。
fetchone():獲取查詢結(jié)果集的下一行。如果沒有下一行,則返回 None。
fetchmany(size=cursor.arraysize):返回查詢結(jié)果集的下 N 行組成的列表。如果沒有更多的數(shù)據(jù)行,則返回空列表。
fetchall():返回查詢結(jié)果集的全部行組成的列表。
close():關(guān)閉游標(biāo)。
rowcount:該只讀屬性返回受 SQL 語句影響的行數(shù)。對于 executemany() 方法,該方法所修改的記錄條數(shù)也可通過該屬性獲取。
lastrowid:該只讀屬性可獲取最后修改行的 rowid。
arraysize:用于設(shè)置或獲取 fetchmany() 默認(rèn)獲取的記錄條數(shù),該屬性默認(rèn)為 1。有些數(shù)據(jù)庫模塊沒有該屬性。
description:該只讀屬性可獲取最后一次查詢返回的所有列的信息。
connection:該只讀屬性返回創(chuàng)建游標(biāo)的數(shù)據(jù)庫連接對象。有些數(shù)據(jù)庫模塊沒有該屬性。
總結(jié)來看,Python 的 DB API 2.0 由一個 connect() 開始,一共涉及數(shù)據(jù)庫連接和游標(biāo)兩個核心 API。它們的分工如下:
數(shù)據(jù)庫連接:用于獲取游標(biāo)、控制事務(wù)。
游標(biāo):執(zhí)行各種 SQL 語句。
掌握了上面這些 API 之后,接下來可以大致歸納出 Python DB API 2.0 的編程步驟。
操作數(shù)據(jù)庫的基本流程
使用 Python DB API 2.0 操作數(shù)據(jù)庫的基本流程如下:
調(diào)用 connect() 方法打開數(shù)據(jù)庫連接,該方法返回數(shù)據(jù)庫連接對象。
通過數(shù)據(jù)庫連接對象打開游標(biāo)。
使用游標(biāo)執(zhí)行 SQL 語句(包括 DDL、DML、select 查詢語句等)。如果執(zhí)行的是查詢語句,則處理查詢數(shù)據(jù)。
關(guān)閉游標(biāo)。
關(guān)閉數(shù)據(jù)庫連接。
下圖顯示了使用 Python DB API 2.0 操作數(shù)據(jù)庫的基本流程。
python api函數(shù)是什么鬼?//、
先下載pip
然后要安什么包,pip install package-name
使用import package
用python很頭疼的一件事就是很難快速找到幫助文檔。
比如查找string類的所有方法。
說實話,這事我做了兩次,現(xiàn)在又忘記了string的文檔藏在哪個角落里了。
字符串是7種序列類型中的一種。
除了序列的操作函數(shù),比如len()來求字符串長度之外,Python還為字符串提供豐富到可以寫個編輯器的API.
首先,下面的查找API都是為了查找位置,或者查一共有幾次這樣的操作。
如果只是想判斷一個字符串是不是另一個字符串的子串的話,使用序列的in運(yùn)算符就可以了。
例:
原型:str.count(sub[, start[, end]])
字符串的count函數(shù)可以數(shù)出來有多少次匹配,我們看個例子,有5個ha和3個hei
輸出為5和2.
haha只能匹配兩次。
再加上擴(kuò)展參數(shù):
find函數(shù)的行為是,如果能找到,則返回在序列中的坐標(biāo),如果找不到,則返回-1. rfind是從右向左查找。我們來看例子:
輸出值為0和6.
找不到的例子:
輸出值都是-1.
完整形式:
index和rindex的功能與find和rfind基本上一致,除了在找不到時會拋出ValueError異常而不是返回-1.
例:
所以我們需要加try...except語句來處理之:
有時候,我們希望做從頭匹配或者匹配尾部。這時候就要用到startswith函數(shù)和endswith函數(shù)。例:
這兩個返回值均為True.
如果需要更復(fù)雜的匹配,還是需要正則表達(dá)式。與Java等語言不同,Python中的正則表達(dá)式有專門的模塊,字符串的API不負(fù)責(zé)這個事情。