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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

【循序渐进学Python】14.数据库的支持

發布時間:2023/12/13 python 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【循序渐进学Python】14.数据库的支持 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

純文本只能夠實現一些簡單有限的功能。如果想要實現自動序列化,也可以使用 shelve 模塊和 pickle 模塊來實現。但是,如果想要自動的實現數據并發訪問,以及更標準,更通用的數據庫(database)存儲方式還是使用數據庫。

1. Python 數據庫 API

很多支持SQL標準的數據庫在Python中都有對應的客戶端模塊。為了在提供相同功能(基本相同)的不同模塊之間進行切換(兼容),Python 規定了一個標準的 DB API。目前API最新版本時 2.0,具體可以參考這里:http://www.python.org/dev/peps/pep-0249/。

1.1 全局變量

任何支持2.0版本的DB API的數據庫模塊都定義了3個描述模塊特性的全局變量:

apilevel 所使用的Python DB API版本 threadsafety 模塊的線程安全級別 paramstyle 在SQL查詢中使用的參數風格

apilevel 是個字符串常量,提供正在使用API的版本號,對于DB API 2.0 版本來說

  • 值可能是 ‘1.0’,
  • 也可能是 ‘2.0’;

threadsafety 這這只有在使用多線程時才有參考價值,取值范圍為0~3的整數。

  • 0 表示完全不共享模塊
    • 1 表示線程本身可以共享模塊,但不對連接共享
  • 3 表示模塊完全是線程安全的

paramstyle 表示在執行多次類似查詢的時候,參數是如何被拼接到SQL查詢中的:

  • 'format'表示標準的字符串格式化
  • 'pyformat'表示擴展的格式代碼,使用字典拼接
  • 'qmark'表示使用問號
  • 'numberic'表示使用 :1 或 :2 格式的字段
  • 'named’表示使用 :name 格式的字段

1.2 異常

API中定義了(層次結構)一些異常類,可以通過 except 塊捕捉多種異常。如果想要知道更多DB API異常的想想可以參考這里:http://www.python.org/dev/peps/pep-0249/#exceptions,下面是DB API中使用的異常:

=============================================================================== 異常 超類 描述 =============================================================================== StandarError 所有異常的泛型基類 Waring StandarError 在非致命錯誤發生時引發 Error StandarError 所有錯誤條件的泛型超類 InterfaceError Error 關于接口而非數據庫的錯誤 DatabaseError Error 與數據庫相關的錯誤的基類 DataError DatabaseError 與數據庫相關的問題,比如值超出范圍 OperationalError DatabaseError 數據庫內部操作錯誤 IntegrityError DatabaseError 關系完整性受到影響,比如鍵檢查失敗 InternalError DatabaseError 數據庫內部錯誤,比如非法游標 ProgramningError DatabaseError 用戶編程錯誤,比如未找到表 NotSupportedError DatabaseError 請求不支持的特性(比如回滾)

1.3 連接和游標

使用 connect 函數連接到數據庫,該函數有多個參數,具體使用方法取決于對應的數據庫。下面是具體的參數含義(使用時推薦使用關鍵字參數的方式):

================================================== 參數名 描述 ================================================== dsn 數據庫源名稱,給出參數表示數據庫依賴(必選) user 用戶名(可選) passowrd 密碼(可選) host 主機名(可選) database 數據庫名(可選)

函數返回連接對象,該對象表示目前和數據庫的會話,對象支持的方法如下:

============================================================= 方法名 描述 ============================================================= close() 關閉連接之后,連接對象和它的游標均不可用 commit() 如果支持的話就提交掛起事務,否則不可用 rollback() 回滾掛起的事務 cursor() 返回連接的游標對象

rollback 方法如果使用的數據庫支持的話,就會撤銷所有未提交的事務。而 cursor 方法則返回一個游標對象,可以通過游標執行SQL查詢并檢查結果。游標比連接支持更多方法,也更加易用,下面是游標方法的概述:

==================================================================================== 名稱 描述 ==================================================================================== callproc(name[, params]) 使用給定的名稱和參數(可選)調用以命名的數據庫程序 close() 關閉游標后,游標不可用 execute(oper[, params]) 執行SQL操作,可選的參數 executemany(oper, pseq) 對序列中的每個參數執行SQL操作 fetchone() 把查詢結果集中的下一行保存為序列或者None fetchmany([size]) 獲取查詢的結果集中的多行,默認尺寸為arraysize fetchall() 將所有(剩余)的行作為序列的序列 nextset() 跳至下一個可用的結果集(可選) setinputsizes(sizes) 為參數預先定義的內存區域 setoutputsize(size[, col]) 為獲取的大數據庫值設定緩沖區尺寸

游標對象還包含一些特性:

================================================== 名稱 描述 ================================================== description 結果列描述的序列,只讀 rowcount 結果中的行數,只讀 arraysize fetchmany中返回的行數,默認為1

1.4 類型

DB API 定義了Python中的類型和數據庫類型的對應關系。通過特殊的類型和值的構造函數以及常量(單例模式),如下(一些模塊可能并不是完全按照這些定義):

================================================== 名稱 描述 ================================================== Date(year, month, day) 創建保存日期值的對象 Time(hour, minute, second) 創建保存時間值的對象 Timestamp(y, mon, d, h, min, s) 創建保存時間戳的對象 DateFromTicks(ticks) 創建保存自新紀元以來的秒數的對象 TimeFromTicks(ticks) 創建保存來自秒數的時間值的對象 TimestampFromTicks(ticks) 創建保存來自秒數的時間戳值的對象 Binary(string) 創建保存二進制字符串值的對象 STRING 描述二進制列(比如LONG或RAW) BINARY 描述數字列 MUMBER 描述數字列 DATETIME 描述日期/時間列 ROWID 描述行ID列

2. SQLite 和PySQLite

SQLite是一個小型的數據庫引擎,它不基于集中式數據庫存儲機制,而是直接作用于本地文件。在Python 2.5 之后,SQLite 的包裝(PySQLite)已經被包含在標準庫中了(在最新的Python版本中已經包含了SQLite數據庫了,并不需要單獨安裝)。

2.1 簡單示例

將SQLite作為名為sqlite3的模塊導入,即可創建一個數據庫文件(不存在則創建,可指定路徑),并連接到數據庫,下面是一個簡單的示例:

# -- coding:utf-8 -- import sqlite3conn = sqlite3.connect('myDatabase.db') curs = conn.cursor() # 獲得游標 conn.commit() # 提交更改 conn.close() # 關閉連接

2.2 創建和填充表

通過下面的示例來學習如果創建和向表中插入數據,在這里使用的數據庫是基于USDA營養數據庫實驗室提供的文本格式的數據庫,在這里使用的文件地址是:http://sr23-nutrient-calculator.googlecode.com/svn-history/r9/trunk/ABBREV.txt,示例如下:

import sqlite3def convert(value):if value.startswith('~'):return value.strip('~')if not value:value = '0'return float(value)conn = sqlite3.connect('food.db') curs = conn.cursor()curs.execute('''CREATE TABLE food(id TEXT PRIMARY KEY,desc TEXT,water FLOAT,kcal FLOAT,protein FLOAT,fat FLOAT,ash FLOAT,carbs FLOAT,fiber FLOAT,sugar FLOAT)''')query = r'INSERT INTO food VALUES(?,?,?,?,?,?,?,?,?,?)'for line in open('ABBREV.txt'):fields = line.split('^')vals = [convert(f) for f in fields[0:10]]curs.execute(query,vals)conn.commit() conn.close()

2.3 搜索和處理結果

查詢數據庫內容只需要創建連接,并獲得該連接的游標即可,通過 execute 方法執行SQL查詢,使用 fetchall 等方法提取結果,如下所示:

# food_query.py import sqlite3,sysconn = sqlite3.connect('food.db') curs = conn.cursor()query = 'select * from food WHERE %s' % sys.argv[1] print query curs.execute(query) names = [f[0] for f in curs.description] for row in curs.fetchall():for pair in zip(names,row):print '%s: %s'% pairprint

運行程序,通過命令行傳遞查詢參數:

python food_query.py "kcal <=100 AND fiber >= 10 ORDER BY sugar"

參考資料&進一步閱讀

Python Doc —— sqlite3

Python基礎教程

轉載于:https://www.cnblogs.com/IPrograming/p/Python-database.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的【循序渐进学Python】14.数据库的支持的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美日韩国产麻豆 | 蜜桃视频中文字幕 | 亚洲国产第一页 | av性天堂网 | 成人激情电影在线观看 | 亚洲色图影院 | 综合精品视频 | 男人综合网 | 少妇高潮露脸国语对白 | 天天看毛片 | 黄色网址视频在线观看 | 一区二区三区在线视频免费观看 | 开心激情网五月天 | av激情四射| 日本www色 | 国产免费一区二区三区视频 | 色婷婷综合久久久中文字幕 | 日本人妻换人妻毛片 | 91视频国产精品 | 蜜桃av噜噜一区二区三区麻豆 | 日本99视频 | 黄色在线小视频 | 日韩第一视频 | 亚洲精品久久一区二区三区777 | 色呦呦视频在线观看 | 国产又粗又猛又爽又黄无遮挡 | 最新色站 | 午夜爱爱影院 | 日韩在线视频一区二区三区 | 国产精品高潮呻吟 | 国产一区二区三区三州 | 天天爽天天爱 | 91人人澡人人爽人人精品 | 色av色 | 欧美激情网址 | 九九影院最新理论片 | www.色综合 | 欧美色图首页 | 99re久久 | 黄色片在线观看视频 | 国产精品又黄又爽又色无遮挡 | 国产又黄又大又粗视频 | 国产激情精品一区二区三区 | 国产一区二区在线免费观看 | 欧洲性生活片 | 韩国日本美国免费毛片 | 绿帽单男| 99er视频| 色综合久久久无码中文字幕波多 | 国产福利一区二区三区在线观看 | 韩国三级hd中文字幕的背景音乐 | 亚洲七区| 日日干天天爽 | 色婷婷久久一区二区三区麻豆 | 奇米影视7777 | 亚洲AV无码AV吞精久久中文版 | 成人久色| 日韩精品无码一区二区 | 内射毛片内射国产夫妻 | 人妻久久一区二区 | 婷婷另类小说 | 男女视频网站 | 潘金莲一级淫片a.aaaaa播放 | 日本特级毛片 | 欧美日韩精品一区二区 | 色哟哟国产精品色哟哟 | 91视频这里只有精品 | 国产精品人八做人人女人a级刘 | va视频在线观看 | 亚洲成人久久久久 | 日日夜夜婷婷 | 免费看黄色网址 | youjizz日本人| www 在线观看视频 | 亚洲一区二区三区婷婷 | www.com在线观看 | 在线播放你懂的 | 亚洲va视频 | 国产一二区在线观看 | 日日爽夜夜 | 被黑人啪到哭的番号922在线 | 高清国产mv在线观看 | 亚洲熟妇国产熟妇肥婆 | a在线一区| 国产又黄又大又爽 | 成人三级黄色片 | 成人综合社区 | 香蕉一区二区 | 精品久久久久一区 | 综合久久五月 | 爆操巨乳 | 国产中文字幕在线视频 | 欧美成人黄色小视频 | 99久久久久久久久久 | 在线视频这里只有精品 | 久久久亚洲国产精品 | 免费日本黄色片 | 色香蕉在线视频 | 美女视频一区 |