亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Python > 正文

Python連接mysql數據庫的正確姿勢

2020-01-04 17:47:03
字體:
來源:轉載
供稿:網友
這篇文章主要為大家詳細介紹了Python連接mysql數據庫的正確姿勢,如何使用Python連接mysql數據庫,本文為大家揭曉,感興趣的小伙伴們可以參考一下
 

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

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

不同的數據庫你需要下載不同的DB API模塊,例如你需要訪問Oracle數據庫和Mysql數據,你需要下載Oracle和MySQL數據庫模塊。

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

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

Python DB-API使用流程:

  • 引入 API 模塊。
  • 獲取與數據庫的連接。
  • 執行SQL語句和存儲過程。
  • 關閉數據庫連接。

一、什么是MySQLdb?

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

二、如何安裝MySQLdb?

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

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

如果執行后的輸出結果如下所示,意味著你沒有安裝 MySQLdb 模塊:

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

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

$ 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權限來安裝上述模塊。

三、數據庫連接

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

  • 您已經創建了數據庫 TESTDB.
  • 在TESTDB數據庫中您已經創建了表 EMPLOYEE
  • EMPLOYEE表字段為 FIRST_NAME, LAST_NAME, AGE, SEX 和 INCOME。
  • 連接數據庫TESTDB使用的用戶名為 “testuser” ,密碼為 “test123”,你可以可以自己設定或者直接使用root用戶名及其密碼,Mysql數據庫用戶授權請使用Grant命令。
  • 在你的機子上已經安裝了 Python MySQLdb 模塊。

實例:

以下實例鏈接Mysql的TESTDB數據庫:

#!/usr/bin/python# -*- coding: UTF-8 -*-import MySQLdb# 打開數據庫連接db = MySQLdb.connect("localhost","codecloud","test123","TESTDB" )# 使用cursor()方法獲取操作游標 cursor = db.cursor()# 使用execute方法執行SQL語句cursor.execute("SELECT VERSION()")# 使用 fetchone() 方法獲取一條數據庫。data = cursor.fetchone()print "Database version : %s " % data# 關閉數據庫連接db.close()

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

Database version : 5.0.45

四、創建數據庫表

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

#!/usr/bin/python# -*- coding: UTF-8 -*-import MySQLdb# 打開數據庫連接db = MySQLdb.connect("localhost","codecloud","test123","TESTDB" )# 使用cursor()方法獲取操作游標 cursor = db.cursor()# 如果數據表已經存在使用 execute() 方法刪除表。cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")# 創建數據表SQL語句sql = """CREATE TABLE EMPLOYEE (     FIRST_NAME CHAR(20) NOT NULL,     LAST_NAME CHAR(20),     AGE INT,      SEX CHAR(1),     INCOME FLOAT )"""cursor.execute(sql)# 關閉數據庫連接db.close()

五、數據庫插入操作

以下實例使用執行 SQL INSERT 語句向表 EMPLOYEE 插入記錄:

#!/usr/bin/python# -*- coding: UTF-8 -*-import MySQLdb# 打開數據庫連接db = MySQLdb.connect("localhost","codecloud","test123","TESTDB" )# 使用cursor()方法獲取操作游標 cursor = db.cursor()# SQL 插入語句sql = """INSERT INTO EMPLOYEE(FIRST_NAME,     LAST_NAME, AGE, SEX, INCOME)     VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""try:  # 執行sql語句  cursor.execute(sql)  # 提交到數據庫執行  db.commit()except:  # Rollback in case there is any error  db.rollback()# 關閉數據庫連接db.close()

以上例子也可以寫成如下形式:

#!/usr/bin/python# -*- coding: UTF-8 -*-import MySQLdb# 打開數據庫連接db = MySQLdb.connect("localhost","codecloud","test123","TESTDB" )# 使用cursor()方法獲取操作游標 cursor = db.cursor()# SQL 插入語句sql = "INSERT INTO EMPLOYEE(FIRST_NAME, /    LAST_NAME, AGE, SEX, INCOME) /    VALUES ('%s', '%s', '%d', '%c', '%d' )" % /    ('Mac', 'Mohan', 20, 'M', 2000)try:  # 執行sql語句  cursor.execute(sql)  # 提交到數據庫執行  db.commit()except:  # 發生錯誤時回滾  db.rollback()# 關閉數據庫連接db.close()

實例:

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

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

六、數據庫查詢操作

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

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

實例:

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

#!/usr/bin/python# -*- coding: UTF-8 -*-import MySQLdb# 打開數據庫連接db = MySQLdb.connect("localhost","codecloud","test123","TESTDB" )# 使用cursor()方法獲取操作游標 cursor = db.cursor()# SQL 查詢語句sql = "SELECT * FROM EMPLOYEE /    WHERE INCOME > '%d'" % (1000)try:  # 執行SQL語句  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"# 關閉數據庫連接db.close()

以上腳本執行結果如下:

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

七、數據庫更新操作

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

 

#!/usr/bin/python# -*- coding: UTF-8 -*-import MySQLdb# 打開數據庫連接db = MySQLdb.connect("localhost","codecloud","test123","TESTDB" )# 使用cursor()方法獲取操作游標 cursor = db.cursor()# SQL 更新語句sql = "UPDATE EMPLOYEE SET AGE = AGE + 1             WHERE SEX = '%c'" % ('M')try:  # 執行SQL語句  cursor.execute(sql)  # 提交到數據庫執行  db.commit()except:  # 發生錯誤時回滾  db.rollback()# 關閉數據庫連接db.close()

執行事務

事務機制可以確保數據一致性。

事務應該具有4個屬性:原子性、一致性、隔離性、持久性。這四個屬性通常稱為ACID特性。

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

Python DB API 2.0 的事務提供了兩個方法 commit 或 rollback。

實例:

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

對于支持事務的數據庫, 在Python數據庫編程中,當游標建立之時,就自動開始了一個隱形的數據庫事務。

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

錯誤處理

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

Python連接mysql數據庫的正確姿勢

以上就是本文的全部內容,希望對大家的學習有所幫助。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产一区二区三区毛片| 日韩成人中文字幕在线观看| 亚洲成色777777女色窝| 国产一区二区三区在线观看视频| 日本久久久久久久久| 亚洲福利影片在线| 欧美另类极品videosbestfree| 性色av一区二区三区红粉影视| 久久视频中文字幕| 久久精品青青大伊人av| 三级精品视频久久久久| 国产专区精品视频| 欧美激情精品久久久久久蜜臀| 国产精品美女午夜av| 久久全国免费视频| 国产精品揄拍一区二区| 成人激情电影一区二区| 欧美成人剧情片在线观看| 国产99久久精品一区二区 夜夜躁日日躁| 曰本色欧美视频在线| 国产午夜精品一区二区三区| 国产成人鲁鲁免费视频a| 国产精品亚洲аv天堂网| 97在线视频免费观看| 亚洲欧美国产精品| 亚洲成色999久久网站| 日韩av色综合| 中文字幕免费精品一区高清| 高清视频欧美一级| 国产精品成熟老女人| 日韩专区在线播放| 中文字幕日韩av综合精品| 欧美在线免费观看| 九九热精品视频国产| 成人妇女免费播放久久久| 久久久久久久久综合| 亚洲精品福利视频| 亚洲成人激情在线观看| 亚洲人成电影网站色…| 精品毛片三在线观看| 亚洲精品久久久久久久久久久久| 国产一区二区在线免费| 中文字幕亚洲欧美一区二区三区| 欧美黄色成人网| 国产精品免费久久久久影院| 久久久久久亚洲| 精品久久香蕉国产线看观看亚洲| 国产日韩欧美在线视频观看| 自拍视频国产精品| 国产日韩欧美在线播放| 中国china体内裑精亚洲片| 国产日韩欧美在线看| 亚洲欧美日韩图片| 日韩精品免费在线播放| 亚洲风情亚aⅴ在线发布| 国产精品久久久久久久电影| 欧美日韩综合视频| 亚洲激情自拍图| 欧洲精品毛片网站| 国产va免费精品高清在线观看| 国产精品久久久久久久av大片| 国产98色在线| 欧美激情精品久久久久久大尺度| 欧美日韩免费观看中文| 久久国产精品久久国产精品| www.国产精品一二区| 亚洲精品国产精品国产自| 成人欧美一区二区三区黑人| 亚洲人成亚洲人成在线观看| 国产91精品黑色丝袜高跟鞋| 国内精品一区二区三区| 中文字幕亚洲综合久久筱田步美| 日韩精品在线观看网站| 欧美丝袜美女中出在线| 成人av.网址在线网站| 亚洲精品免费在线视频| 亚洲第一级黄色片| 欧美日韩国产成人高清视频| 亚洲第一av在线| 亚洲激情在线观看视频免费| 精品久久中文字幕| 精品视频9999| 97人洗澡人人免费公开视频碰碰碰| 国产精品一区二区三区在线播放| 亚洲а∨天堂久久精品喷水| 国产亚洲激情视频在线| 欧美激情在线一区| 中文字幕日韩有码| 91地址最新发布| 国产精品电影久久久久电影网| 国产欧美精品xxxx另类| 国产成人精品综合久久久| 亚洲自拍偷拍一区| 日韩中文字幕在线精品| 亚洲人成电影在线播放| 亚洲欧美国产精品久久久久久久| 午夜欧美不卡精品aaaaa| 538国产精品视频一区二区| 亚洲欧美日韩视频一区| 亚洲精品福利在线观看| 欧美午夜视频在线观看| 国产精品美女在线| 欧美中文字幕视频| 欧美日韩国产精品一区二区不卡中文| 久久久久久久色| 91精品视频在线看| 久久久精品欧美| 欧美xxxx做受欧美.88| 欧美色视频日本高清在线观看| 国产精品美女视频网站| 中文字幕亚洲无线码在线一区| 国产在线视频一区| 久久精品国产精品亚洲| 中文字幕av一区二区三区谷原希美| 欧美日韩综合视频网址| 555www成人网| 久久久久久999| 欧美小视频在线观看| 久久不射热爱视频精品| 亚洲国产美女精品久久久久∴| 国产精品高潮在线| 欧美大尺度电影在线观看| 亚洲一区二区三区成人在线视频精品| 国产xxx69麻豆国语对白| 成人黄色午夜影院| 日韩高清中文字幕| 欧美性xxxx极品高清hd直播| 久久久久久一区二区三区| 大胆人体色综合| 国产区精品在线观看| 91在线视频九色| 欧美制服第一页| 成人在线精品视频| 亚洲精品国产精品自产a区红杏吧| 欧美性开放视频| 亚洲国产精品999| 91精品国产777在线观看| 欧美综合激情网| 欧美福利视频网站| 欧美日韩国产页| 国语对白做受69| 尤物精品国产第一福利三区| 夜夜嗨av色综合久久久综合网| 欧美性xxxxxx| 亚洲一二三在线| 一区二区三区日韩在线| 久久久久久久激情视频| 国产高清在线不卡| 国产精品com| 成人性生交大片免费看视频直播| 久国内精品在线| 黄色精品在线看| 亚洲天堂男人天堂女人天堂| 国产一区二区精品丝袜| 一本一本久久a久久精品综合小说| 久久精品国产久精国产一老狼| 欧美性生交大片免费| 日本中文字幕不卡免费| 亚洲精品一区二三区不卡| 久久精品电影一区二区| 日韩视频欧美视频| 欧美激情亚洲自拍| 欧美精品做受xxx性少妇| 久久精品99国产精品酒店日本|