您好,登錄后才能下訂單哦!
如上圖是應用程序與關系型數據庫的多層通信,第一個框一般是C/C++程序,后兩個框是python程序。在python應用中,都是使用數據庫適配器去訪問數據庫的,不同數據庫有不同的適配器,但是都有一套標準,具體屬性如下:
python的DB-API模塊屬性
<apilevel>
該字符串(注意,不是浮點型)指明了模塊需要兼容的DB-API 最高版本,比如,1.0、2.0 等。該屬性的默認值是1.0。
<threadsafety>
這是一個整型值,可選值如下。 ? 0:不支持線程安全。線程間不能共享模塊。 ? 1:最小化線程安全支持:線程間可以共享模塊,但是不能共享連接。 ? 2:適度的線程安全支持:線程間可以共享模塊和連接,但是不能共享游標。 ? 3:完整的線程安全支持:線程間可以共享模塊、連接和游標。
<paramstyle參數風格>
參數風格 描 述 示 例 numeric 數值位置風格 WHERE name=:1 named 命名風格 WHERE name=:name pyformat Python 字典printf()格式轉換 WHERE name=%(name)s qmark 問號風格 WHERE name=? format ANSIC 的printf()格式轉換WHERE name=%s
<connect()函數屬性>
參 數 描 述 user 用戶名 password 密碼 host 主機名 database/db 數據庫名 dsn 數據源名 MySQLdb適配器不支持dsn,connect()函數調用參數的方法如:MySQLdb.connect(host='172.16.1.238',db='school',user='root',password='******')
<異常>
異 常 描 述 Warning 警告異常基類 Error 錯誤異常基類 InterfaceError 數據庫接口(非數據庫)錯誤 DatabaseError 數據庫錯誤 DataError 處理數據時出現問題 OperationlError 數據庫操作執行期間出現錯誤 IntegrityError 數據庫關系完整性錯誤 InternalError 數據庫內部錯誤 ProgrammingError SQL 命令執行失敗 NotSupportedError 出現不支持的操作
python的DB-API模塊常見對象
使用MySQLdb模塊操作mysql數據庫的一個簡單例子:
#-*- coding:utf-8 -*- #AUTH:FJC import MySQLdb from _mysql_exceptions import * #連接數據庫,返回MySQLdb.connections.Connection對象 my_conn = MySQLdb.connect(host='172.16.1.238',db='school',user='root',password='123456') #獲取游標,返回MySQLdb.cursors.Cursor對象 my_cur = my_conn.cursor() try: #執行數據庫原生語句 my_exec = my_cur.execute('select * from school.boys;') #返回查詢結果的前兩行 print(my_cur.fetchmany(2)) my_cur.execute('insert into school.boys values(4,"zhaoliu",20);') my_conn.commit() except ProgrammingError: print("SQL語法錯誤!") finally: my_conn.close()
與數據庫交互的過程可以簡單概括為(當然不止這些):
調用connect()方法返回一個Connect對象-->調用Connect對象的cursor()方法返回一個游標對象-->調用游標對象的execute*()和fetch*()方法等方法向數據庫發送請求-->調用Connect對象的commit()方法提交事務-->調用Connect對象的close()方法關閉數據庫連接
常用的對象如下:
Connect對象 <class 'MySQLdb.connections.Connection'>
Connect對象方法包括: 方 法 名 描 述 close () 關閉數據庫連接 commit() 提交當前事務,如果數據庫不支持事務或開啟了自動提交,該方法將無法使用 rollback() 取消當前事務,同樣如果數據庫不支持事務,該方法將無法使用 cursor() 使用該連接創建(并返回)一個游標或類游標的對象 errorhandler (cxn, cur, errcls, errval ) 作為給定連接的游標的處理程序
Cursor對象 <class 'MySQLdb.cursors.Cursor'>
Python DB-API 游標對象總能提供游標的功能,即使是那些不支持游標的數據庫。當游標創建好后,就可以執行查詢或命令(或多個查詢和命令),并從結果集中取回一行或多行結果。
Cursor 對象的數據屬性和方法包括: 對 象 屬 性 描 述 arraysize 使用 fetchmany()方法時,一次取出的結果行數,默認為1 connection 創建此游標的連接(可選) description 返回游標活動狀態(7 項元組):(name, type_code, display_size, internal_ size,precision, scale, null_ok),只有name 和type_code 是必需的 lastrowid 上次修改行的行ID(可選;如果不支持行ID,則返回None) rowcount 上次 execute*()方法處理或影響的行數 callproc( func [,args]) 調用存儲過程 close() 關閉游標 execute (op[,args]) 執行數據庫查詢或命令 executemany (op,args) 類似execute()和map()的結合,為給定的所有參數準備并執行數據庫查詢或命令 fetchone() 獲取查詢結果的第一行 fetchmany([size=cursor.arraysize]) 獲取查詢結果的下面size 行,例如:my_cur.fetchmany(2)返回查詢結果的前兩行 fetchall() 獲取查詢結果的所有(剩余)行 __iter__() 為游標創建迭代器對象(可選,參考next()) messages 游標執行后從數據庫中獲得的消息列表(元組集合,可選) next () 被迭代器用于獲取查詢結果的下一行(可選,類似fetchone(),參考__iter__()) nextset() 移動到下一個結果集合(如果支持) rownumber 當前結果集中游標的索引(以行為單位,從0 開始,可選) setinputsizes(sizes) 設置允許的最大輸入大小(必須有,但是實現是可選的) setoutputsize(size[,col]) 設置大列獲取的最大緩沖區大小(必須有,但是實現是可選的)
python字符串到數據庫特殊對象轉換常用的類型對象和構造函數:
類 型 對 象 描 述 Date (yr, mo, dy) 日期值對象 Time (hr, min, sec) 時間值對象 Timestamp (yr, mo, dy, hr, min, sec) 時間戳值對象 DateFromTicks (ticks) 日期對象,給出從新紀元時間(1970 年1 月1 日00:00:00 UTC)以來的秒數 TimeFromTicks (ticks) 時間對象,給出從新紀元時間(1970 年1 月1 日00:00:00 UTC)以來的秒數 TimestampFromTicks (ticks) 時間戳對象,給出從新紀元時間(1970 年1 月1 日00:00:00 UTC)以來的秒數 Binary (string) 對應二進制(長)字符串對象 STRING 表示基于字符串列的對象,比如VARCHAR BINARY 表示(長)二進制列的對象,比如RAW、BLOB NUMBER 表示數值列的對象 DATETIME 表示日期/時間列的對象 ROWID 表示“行ID”列的對象
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。