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

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

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

開(kāi)通VIP
python操作mysql數據庫 | 菜鳥(niǎo)教程

python操作mysql數據庫

Python 標準數據庫接口為 Python DB-API,Python DB-API為開(kāi)發(fā)人員提供了數據庫應用編程接口。

Python 數據庫接口支持非常多的數據庫,你可以選擇適合你項目的數據庫:

  • GadFly
  • mSQL
  • MySQL
  • PostgreSQL
  • Microsoft SQL Server 2000
  • Informix
  • Interbase
  • Oracle
  • Sybase

你可以訪(fǎng)問(wèn)Python數據庫接口及API查看詳細的支持數據庫列表。

不同的數據庫你需要下載不同的DB API模塊,例如你需要訪(fǎng)問(wèn)Oracle數據庫和Mysql數據,你需要下載Oracle和MySQL數據庫模塊。

DB-API 是一個(gè)規范. 它定義了一系列必須的對象和數據庫存取方式, 以便為各種各樣的底層數據庫系統和多種多樣的數據庫接口程序提供一致的訪(fǎng)問(wèn)接口 。

Python的DB-API,為大多數的數據庫實(shí)現了接口,使用它連接各數據庫后,就可以用相同的方式操作各數據庫。

Python DB-API使用流程:

  • 引入 API 模塊。
  • 獲取與數據庫的連接。
  • 執行SQL語(yǔ)句和存儲過(guò)程。
  • 關(guān)閉數據庫連接。

什么是MySQLdb?

MySQLdb 是用于Python鏈接Mysql數據庫的接口,它實(shí)現了 Python 數據庫 API 規范 V2.0,基于 MySQL C API 上建立的。


如何安裝MySQLdb?

為了用DB-API編寫(xiě)MySQL腳本,必須確保已經(jīng)安裝了MySQL。復制以下代碼,并執行:

#!/usr/bin/python# -*- coding: UTF-8 -*-import MySQLdb

如果執行后的輸出結果如下所示,意味著(zhù)你沒(méi)有安裝 MySQLdb 模塊:

Traceback (most recent call last):  File "test.py", line 3, in <module>    import MySQLdbImportError: No module named MySQLdb

安裝MySQLdb,請訪(fǎng)問(wèn) http://sourceforge.net/projects/mysql-python ,(Linux平臺可以訪(fǎng)問(wèn):https://pypi.python.org/pypi/MySQL-python)從這里可選擇適合您的平臺的安裝包,分為預編譯的二進(jìn)制文件和源代碼安裝包。

如果您選擇二進(jìn)制文件發(fā)行版本的話(huà),安裝過(guò)程基本安裝提示即可完成。如果從源代碼進(jìn)行安裝的話(huà),則需要切換到MySQLdb發(fā)行版本的頂級目錄,并鍵入下列命令:

$ gunzip MySQL-python-1.2.2.tar.gz$ tar -xvf MySQL-python-1.2.2.tar$ cd MySQL-python-1.2.2$ python setup.py build$ python setup.py install

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


數據庫連接

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

  • 您已經(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/python# -*- coding: UTF-8 -*-import MySQLdb# 打開(kāi)數據庫連接db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )# 使用cursor()方法獲取操作游標 cursor = db.cursor()# 使用execute方法執行SQL語(yǔ)句cursor.execute("SELECT VERSION()")# 使用 fetchone() 方法獲取一條數據庫。data = cursor.fetchone()print "Database version : %s " % data# 關(guān)閉數據庫連接db.close()
執行以上腳本輸出結果如下:
Database version : 5.0.45

創(chuàng )建數據庫表

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

#!/usr/bin/python# -*- coding: UTF-8 -*-import MySQLdb# 打開(kāi)數據庫連接db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )# 使用cursor()方法獲取操作游標 cursor = db.cursor()# 如果數據表已經(jīng)存在使用 execute() 方法刪除表。cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")# 創(chuàng  )建數據表SQL語(yǔ)句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/python# -*- coding: UTF-8 -*-import MySQLdb# 打開(kāi)數據庫連接db = MySQLdb.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:   # Rollback in case there is any error   db.rollback()# 關(guān)閉數據庫連接db.close()

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

#!/usr/bin/python# -*- coding: UTF-8 -*-import MySQLdb# 打開(kāi)數據庫連接db = MySQLdb.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)   # 提交到數據庫執行   db.commit()except:   # 發(fā)生錯誤時(shí)回滾   db.rollback()# 關(guān)閉數據庫連接db.close()

實(shí)例:

以下代碼使用變量向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/python# -*- coding: UTF-8 -*-import MySQLdb# 打開(kāi)數據庫連接db = MySQLdb.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/python# -*- coding: UTF-8 -*-import MySQLdb# 打開(kāi)數據庫連接db = MySQLdb.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()

執行事務(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)似文章
Python MySQL
python+mysql
python2.7可以同時(shí)連接兩個(gè)數據庫嗎
python連接mysql數據庫操作
python模塊之MySQLdb: 用python連接mysql數據庫
Python3 MySQL 數據庫連接 | 菜鳥(niǎo)教程
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

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