欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Python3 MySQL 數據庫連接 | 菜鳥(niǎo)教程

Python3 MySQL 數據庫連接

本文我們?yōu)榇蠹医榻B Python3 使用 PyMySQL 連接數據庫,并實(shí)現簡(jiǎn)單的增刪改查。

什么是 PyMySQL?

PyMySQL 是在 Python3.x 版本中用于連接 MySQL 服務(wù)器的一個(gè)庫,Python2中則使用mysqldb。

PyMySQL 遵循 Python 數據庫 API v2.0 規范,并包含了 pure-Python MySQL 客戶(hù)端庫。


PyMySQL 安裝

在使用 PyMySQL 之前,我們需要確保 PyMySQL 已安裝。

PyMySQL 下載地址:https://github.com/PyMySQL/PyMySQL。

如果還未安裝,我們可以使用以下命令安裝最新版的 PyMySQL:

$ pip install PyMySQL

如果你的系統不支持 pip 命令,可以使用以下方式安裝:

1、使用 git 命令下載安裝包安裝(你也可以手動(dòng)下載):

$ git clone https://github.com/PyMySQL/PyMySQL$ cd PyMySQL/$ python3 setup.py install

2、如果需要制定版本號,可以使用 curl 命令來(lái)安裝:

$ # X.X 為 PyMySQL 的版本號$ curl -L https://github.com/PyMySQL/PyMySQL/tarball/pymysql-X.X | tar xz$ cd PyMySQL*$ python3 setup.py install$ # 現在你可以刪除 PyMySQL* 目錄

注意:請確保您有root權限來(lái)安裝上述模塊。

安裝的過(guò)程中可能會(huì )出現'ImportError: No module named setuptools'的錯誤提示,意思是你沒(méi)有安裝setuptools,你可以訪(fǎng)問(wèn)https://pypi.python.org/pypi/setuptools 找到各個(gè)系統的安裝方法。

Linux 系統安裝實(shí)例:

$ wget https://bootstrap.pypa.io/ez_setup.py$ python3 ez_setup.py

數據庫連接

連接數據庫前,請先確認以下事項:

  • 您已經(jīng)創(chuàng )建了數據庫 TESTDB.
  • 在TESTDB數據庫中您已經(jīng)創(chuàng )建了表 EMPLOYEE
  • EMPLOYEE表字段為 FIRST_NAME, LAST_NAME, AGE, SEX 和 INCOME。
  • 連接數據庫TESTDB使用的用戶(hù)名為 'testuser' ,密碼為 'test123',你可以可以自己設定或者直接使用root用戶(hù)名及其密碼,Mysql數據庫用戶(hù)授權請使用Grant命令。
  • 在你的機子上已經(jīng)安裝了 Python MySQLdb 模塊。
  • 如果您對sql語(yǔ)句不熟悉,可以訪(fǎng)問(wèn)我們的 SQL基礎教程

實(shí)例:

以下實(shí)例鏈接Mysql的TESTDB數據庫:

#!/usr/bin/python3import pymysql# 打開(kāi)數據庫連接db = pymysql.connect('localhost','testuser','test123','TESTDB' )# 使用 cursor() 方法創(chuàng )建一個(gè)游標對象 cursorcursor = db.cursor()# 使用 execute() 方法執行 SQL 查詢(xún) cursor.execute('SELECT VERSION()')# 使用 fetchone() 方法獲取單條數據.data = cursor.fetchone()print ('Database version : %s ' % data)# 關(guān)閉數據庫連接db.close()

執行以上腳本輸出結果如下:

Database version : 5.5.20-log

創(chuàng )建數據庫表

如果數據庫連接存在我們可以使用execute()方法來(lái)為數據庫創(chuàng )建表,如下所示創(chuàng )建表EMPLOYEE:

#!/usr/bin/python3import pymysql# 打開(kāi)數據庫連接db = pymysql.connect('localhost','testuser','test123','TESTDB' )# 使用 cursor() 方法創(chuàng )建一個(gè)游標對象 cursorcursor = db.cursor()# 使用 execute() 方法執行 SQL,如果表存在則刪除cursor.execute('DROP TABLE IF EXISTS EMPLOYEE')# 使用預處理語(yǔ)句創(chuàng )建表sql = '''CREATE TABLE EMPLOYEE ( FIRST_NAME CHAR(20) NOT NULL, LAST_NAME CHAR(20), AGE INT, SEX CHAR(1), INCOME FLOAT )'''cursor.execute(sql)# 關(guān)閉數據庫連接db.close()

數據庫插入操作

以下實(shí)例使用執行 SQL INSERT 語(yǔ)句向表 EMPLOYEE 插入記錄:

#!/usr/bin/python3import pymysql# 打開(kāi)數據庫連接db = pymysql.connect('localhost','testuser','test123','TESTDB' )# 使用cursor()方法獲取操作游標 cursor = db.cursor()# SQL 插入語(yǔ)句sql = '''INSERT INTO EMPLOYEE(FIRST_NAME, LAST_NAME, AGE, SEX, INCOME) VALUES ('Mac', 'Mohan', 20, 'M', 2000)'''try: # 執行sql語(yǔ)句 cursor.execute(sql) # 提交到數據庫執行 db.commit()except: # 如果發(fā)生錯誤則回滾 db.rollback()# 關(guān)閉數據庫連接db.close()

以上例子也可以寫(xiě)成如下形式:

#!/usr/bin/python3import pymysql# 打開(kāi)數據庫連接db = pymysql.connect('localhost','testuser','test123','TESTDB' )# 使用cursor()方法獲取操作游標 cursor = db.cursor()# SQL 插入語(yǔ)句sql = 'INSERT INTO EMPLOYEE(FIRST_NAME, \ LAST_NAME, AGE, SEX, INCOME) \ VALUES ('%s', '%s', '%d', '%c', '%d' )' % \ ('Mac', 'Mohan', 20, 'M', 2000)try: # 執行sql語(yǔ)句 cursor.execute(sql) # 執行sql語(yǔ)句 db.commit()except: # 發(fā)生錯誤時(shí)回滾 db.rollback()# 關(guān)閉數據庫連接db.close()

以下代碼使用變量向SQL語(yǔ)句中傳遞參數:

..................................user_id = 'test123'password = 'password'con.execute('insert into Login values('%s', '%s')' % \ (user_id, password))..................................

數據庫查詢(xún)操作

Python查詢(xún)Mysql使用 fetchone() 方法獲取單條數據, 使用fetchall() 方法獲取多條數據。

  • fetchone(): 該方法獲取下一個(gè)查詢(xún)結果集。結果集是一個(gè)對象
  • fetchall(): 接收全部的返回結果行.
  • rowcount: 這是一個(gè)只讀屬性,并返回執行execute()方法后影響的行數。

實(shí)例:

查詢(xún)EMPLOYEE表中salary(工資)字段大于1000的所有數據:

#!/usr/bin/python3import pymysql# 打開(kāi)數據庫連接db = pymysql.connect('localhost','testuser','test123','TESTDB' )# 使用cursor()方法獲取操作游標 cursor = db.cursor()# SQL 查詢(xún)語(yǔ)句sql = 'SELECT * FROM EMPLOYEE \ WHERE INCOME > '%d'' % (1000)try: # 執行SQL語(yǔ)句 cursor.execute(sql) # 獲取所有記錄列表 results = cursor.fetchall() for row in results: fname = row[0] lname = row[1] age = row[2] sex = row[3] income = row[4] # 打印結果 print ('fname=%s,lname=%s,age=%d,sex=%s,income=%d' % \ (fname, lname, age, sex, income ))except: print ('Error: unable to fecth data')# 關(guān)閉數據庫連接db.close()

以上腳本執行結果如下:

fname=Mac, lname=Mohan, age=20, sex=M, income=2000

數據庫更新操作

更新操作用于更新數據表的的數據,以下實(shí)例將 TESTDB表中的 SEX 字段全部修改為 'M',AGE 字段遞增1:

#!/usr/bin/python3import pymysql# 打開(kāi)數據庫連接db = pymysql.connect('localhost','testuser','test123','TESTDB' )# 使用cursor()方法獲取操作游標 cursor = db.cursor()# SQL 更新語(yǔ)句sql = 'UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '%c'' % ('M')try: # 執行SQL語(yǔ)句 cursor.execute(sql) # 提交到數據庫執行 db.commit()except: # 發(fā)生錯誤時(shí)回滾 db.rollback()# 關(guān)閉數據庫連接db.close()

刪除操作

刪除操作用于刪除數據表中的數據,以下實(shí)例演示了刪除數據表 EMPLOYEE 中 AGE 大于 20 的所有數據:

#!/usr/bin/python3import pymysql# 打開(kāi)數據庫連接db = pymysql.connect('localhost','testuser','test123','TESTDB' )# 使用cursor()方法獲取操作游標 cursor = db.cursor()# SQL 刪除語(yǔ)句sql = 'DELETE FROM EMPLOYEE WHERE AGE > '%d'' % (20)try: # 執行SQL語(yǔ)句 cursor.execute(sql) # 提交修改 db.commit()except: # 發(fā)生錯誤時(shí)回滾 db.rollback()# 關(guān)閉連接db.close()

執行事務(wù)

事務(wù)機制可以確保數據一致性。

事務(wù)應該具有4個(gè)屬性:原子性、一致性、隔離性、持久性。這四個(gè)屬性通常稱(chēng)為ACID特性。

  • 原子性(atomicity)。一個(gè)事務(wù)是一個(gè)不可分割的工作單位,事務(wù)中包括的諸操作要么都做,要么都不做。
  • 一致性(consistency)。事務(wù)必須是使數據庫從一個(gè)一致性狀態(tài)變到另一個(gè)一致性狀態(tài)。一致性與原子性是密切相關(guān)的。
  • 隔離性(isolation)。一個(gè)事務(wù)的執行不能被其他事務(wù)干擾。即一個(gè)事務(wù)內部的操作及使用的數據對并發(fā)的其他事務(wù)是隔離的,并發(fā)執行的各個(gè)事務(wù)之間不能互相干擾。
  • 持久性(durability)。持續性也稱(chēng)永久性(permanence),指一個(gè)事務(wù)一旦提交,它對數據庫中數據的改變就應該是永久性的。接下來(lái)的其他操作或故障不應該對其有任何影響。

Python DB API 2.0 的事務(wù)提供了兩個(gè)方法 commit 或 rollback。

實(shí)例

# SQL刪除記錄語(yǔ)句sql = 'DELETE FROM EMPLOYEE WHERE AGE > '%d'' % (20)try: # 執行SQL語(yǔ)句 cursor.execute(sql) # 向數據庫提交 db.commit()except: # 發(fā)生錯誤時(shí)回滾 db.rollback()

對于支持事務(wù)的數據庫, 在Python數據庫編程中,當游標建立之時(shí),就自動(dòng)開(kāi)始了一個(gè)隱形的數據庫事務(wù)。

commit()方法游標的所有更新操作,rollback()方法回滾當前游標的所有操作。每一個(gè)方法都開(kāi)始了一個(gè)新的事務(wù)。


錯誤處理

DB API中定義了一些數據庫操作的錯誤及異常,下表列出了這些錯誤和異常:

異常描述
Warning當有嚴重警告時(shí)觸發(fā),例如插入數據是被截斷等等。必須是 StandardError 的子類(lèi)。
Error警告以外所有其他錯誤類(lèi)。必須是 StandardError 的子類(lèi)。
InterfaceError當有數據庫接口模塊本身的錯誤(而不是數據庫的錯誤)發(fā)生時(shí)觸發(fā)。 必須是Error的子類(lèi)。
DatabaseError和數據庫有關(guān)的錯誤發(fā)生時(shí)觸發(fā)。 必須是Error的子類(lèi)。
DataError當有數據處理時(shí)的錯誤發(fā)生時(shí)觸發(fā),例如:除零錯誤,數據超范圍等等。 必須是DatabaseError的子類(lèi)。
OperationalError指非用戶(hù)控制的,而是操作數據庫時(shí)發(fā)生的錯誤。例如:連接意外斷開(kāi)、 數據庫名未找到、事務(wù)處理失敗、內存分配錯誤等等操作數據庫是發(fā)生的錯誤。 必須是DatabaseError的子類(lèi)。
IntegrityError完整性相關(guān)的錯誤,例如外鍵檢查失敗等。必須是DatabaseError子類(lèi)。
InternalError 數據庫的內部錯誤,例如游標(cursor)失效了、事務(wù)同步失敗等等。 必須是DatabaseError子類(lèi)。
ProgrammingError程序錯誤,例如數據表(table)沒(méi)找到或已存在、SQL語(yǔ)句語(yǔ)法錯誤、 參數數量錯誤等等。必須是DatabaseError的子類(lèi)。
NotSupportedError不支持錯誤,指使用了數據庫不支持的函數或API等。例如在連接對象上 使用.rollback()函數,然而數據庫并不支持事務(wù)或者事務(wù)已關(guān)閉。 必須是DatabaseError的子類(lèi)。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
python3+flask+mysql實(shí)現登錄注冊
Python操作MySQL
python操作mysql數據庫 | 菜鳥(niǎo)教程
python連接mysql數據庫操作
Python+MySQL數據庫操作(PyMySQL)
PyMySQL基本使用
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久