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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

python圣斗士修炼(十八):访问mysql数据库

發布時間:2024/3/13 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python圣斗士修炼(十八):访问mysql数据库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

安裝驅動

windows:
首先要確定自己已經安裝pip
1、
查看是否安裝:
C:\Users\Administrator>pip -V
pip 9.0.1 from d:\python27\lib\site-packages (python 2.7)
出現以上提示則證明已安裝
2、
安裝MySQLdb之前先要安裝wheel,執行pip install wheel命令進行安裝
3、
下載MySQL_python-1.2.5-cp27-none-win32.whl安裝包,在下載之前先要確定你安裝的Python是32位的還是64位的,如果是32位的就下載32位的,如果是64位的就下載64位的。在這里下載:http://www.lfd.uci.edu/~gohlke/pythonlibs/
切換到這個軟件包的當前路徑,執行安裝操作:
執行pip install MySQL_python-1.2.5-cp27-none-win32.whl ,如果是安裝64位的,需要把這個文件名改為“MySQL_python-1.2.5-cp27-none-any.whl”。
linux:
yum install -y python-devel
pip install mysql-python
注意:python3.5以上已經沒有這個庫了你可以試用mysqlpy
完成收工:
如果出現:
EnvironmentError: mysql_config not found
yum install -y mysql-devel

如果import MySQLdb時出現:
ImportError: libmysqlclient.so.18: cannot open shared object file: No such file or directory
解決:
找到自己數據庫 的依賴庫,做個軟連接過去即可
ln -s /phpstudy/mysql/lib/libmysqlclient.so.18 /usr/lib64/libmysqlclient.so.18

連接數據庫

參數一目了然:

import MySQLdb conn=MySQLdb.connect(host="192.168.1.204",user="root",passwd="123456",db="python",charset="utf-8")

有時候,為了我們代碼的規范,我更加推薦把所有數據庫的配置寫在一個字典中,如下所示:

def connect_mysql():db_config = {'host': '192.168.1.204','port': 3306,'user': 'root','passwd': '123456','db': 'python','charset': 'utf8'}try:cnx = MySQLdb.connect(**db_config)except Exception as e:raise ereturn cnx

Mysql事務

MySQL 事務主要用于處理操作量大,復雜度高的數據。比如,你操作一個數據庫,公司的一個員工離職了,你要在數據庫中刪除他的資料,也要刪除該人員相關的,比如郵箱,個人資產等。這些數據庫操作語言就構成了一個事務。
在MySQL中只有使用了Innodb數據庫引擎的數據庫或表才支持事務,所以很多情況下我們都使用innodb引擎。
事務處理可以用來維護數據庫的完整性,保證成批的SQL語句要么全部執行,要么全部不執行。
一般來說,事務是必須滿足4個條件(ACID): Atomicity(原子性)、Consistency(穩定性)、Isolation(隔離性)、Durability(可靠性)
1、事務的原子性:一組事務,要么成功;要么撤回。
2、穩定性 : 有非法數據(外鍵約束之類),事務撤回。
3、隔離性:事務獨立運行。一個事務處理后的結果,影響了其他事務,那么其他事務會撤回。事務的100%隔離,需要犧牲速度。
4、可靠性:軟、硬件崩潰后,InnoDB數據表驅動會利用日志文件重構修改。可靠性和高速度不可兼得, innodb_flush_log_at_trx_commit選項 決定什么時候吧事務保存到日志里。
而mysql在默認的情況下,他是把每個select,insert,update,delete等做為一個事務的,

登錄mysql服務器,進入mysql,執行以下命令:

mysql> show variables like 'auto%'; +--------------------------+-------+ | Variable_name | Value | +--------------------------+-------+ | auto_increment_increment | 1 | | auto_increment_offset | 1 | | autocommit | ON | | automatic_sp_privileges | ON | +--------------------------+-------+

如上所示: 有一個參數autocommit就是自動提交的意思,每執行一個msyql的select,insert,update等操作,就會進行自動提交。
如果把改選項關閉,我們就可以每次執行完一次代碼就需要進行手動提交,connect對象給我們提供了兩種辦法來操作提交數據。
mysql事務的方法
commit():提交當前事務,如果是支持事務的數據庫執行增刪改后沒有commit則數據庫默認回滾,白操作了
rollback():取消當前事務
我們先創建一個員工表:

create table employees (emp_no int not null auto_increment,emp_name varchar(16) not null,gender enum('M', 'F') not null,hire_date date not null,primary key (emp_no));

其中,emp_no為員工id,為主鍵且唯一
emp_name為:員工的名字
fender為:性別,只有M和F兩種選擇
hire_date為:雇傭的時間。
為了試驗的效果,我們插入幾條數據:

insert into employees(emp_no, emp_name, gender, hire_date) values(1001, 'lingjiang', 'M', '2015-04-01'); insert into employees(emp_no, emp_name, gender, hire_date) values(1002, 'xiang', 'M', '2015-04-01'); insert into employees(emp_no, emp_name, gender, hire_date) values(1003, 'shang', 'M', '2015-04-01'); mysql> select * from employees; +--------+-----------+--------+------------+ | emp_no | emp_name | gender | hire_date | +--------+-----------+--------+------------+ | 1001 | lingjiang | M | 2015-04-01 | | 1002 | xiang | M | 2015-04-01 | | 1003 | shang | M | 2015-04-01 | +--------+-----------+--------+------------+ a) rows in set (0.00 sec)

游標操作mysql數據

通過python代碼增加一條數據到數據庫中,代碼如下:

import MySQLdb #連接數據庫需要ip,用戶密碼,庫名,字符集編碼 #conn=MySQLdb.connect(host="192.168.1.204",user="root",passwd="123456",db="python",charset="utf-8")def connect_mysql():db_config = {'host': '192.168.1.204','port': 3306,'user': 'root','passwd': '123456','db': 'python','charset': 'utf8'}try:cnx = MySQLdb.connect(**db_config)except Exception as e:raise ereturn cnxif __name__ =='__main__': #定義sql語句sql = '''create table test(id int not null);insert into test(id) values(100);'''cnx=connect_mysql() #定義游標cus=cnx.cursor()try: #執行sqlcus.execute(sql) #關閉游標cus.close() #提交sql語句cnx.commit()except Exception as e: #回滾cnx.rollback()print('Error') # raise efinally:cnx.close()運行該代碼塊后,查看Mysqlmysql> select * from test; +-----+ | id | +-----+ | 100 | +-----+ 1 row in set (0.00 sec)

總結

以上是生活随笔為你收集整理的python圣斗士修炼(十八):访问mysql数据库的全部內容,希望文章能夠幫你解決所遇到的問題。

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