Python中操作mysql知识(一)
Python 標準數據庫接口為 Python DB-API,Python DB-API為開發人員提供了數據庫應用編程接口。
Python 數據庫接口支持非常多的數據庫,你可以選擇適合你項目的數據庫:
GadFly
mSQL
MySQL
PostgreSQL
Microsoft SQL Server 2000
Informix
Interbase
Oracle
Sybase
Python的DB-API,為大多數的數據庫實現了接口,使用它連接各數據庫后,就可以用相同 的方式操作各數據庫。
Python DB-API使用流程:
1.?? ?引入API模塊。
2.?? ?獲取與數據庫的連接。
3.?? ?執行SQL語句和存儲過程。
4.?? ?關閉數據庫連接。
?
什么是MySQLdb?
MySQLdb 是用于Python鏈接Mysql數據庫的接口,它實現了 Python 數據庫 API 規范 V2.0,基于 MySQL C API 上建立的。
如何安裝MySQLdb?
為了用DB-API編寫MySQL腳本,必須確保已經安裝了MySQL。復制以下代碼,并執行:
如果執行后的輸出結果如下所示,意味著你沒有安裝 MySQLdb 模塊:
安裝MySQLdb,請訪問 http://sourceforge.net/projects/mysql-python ,(Linux平臺可以訪問:https://pypi.python.org/pypi/MySQL-python)從這里可選擇適合您的平臺的安裝包,分為預編譯的二進制文件和源代碼安裝包。
如果您選擇二進制文件發行版本的話,安裝過程基本安裝提示即可完成。如果從源代碼進行安裝的話,則需要切換到MySQLdb發行版本的頂級目錄,并鍵入下列命令:
pip好像是不支持安裝MySQLdb的,我們可以通過網站下載安裝,
下載地址:https://pypi.python.org/pypi/MySQL-python/1.2.5
分別對應有windows和源碼安裝的方法
安裝依賴包:
yum?install?–y?python-devel yum?install?–y?mysql-devel yum?install?–y?gccPython3以后好像是不支持MySQLdb了,可以是用pymysql包,
可以直接通過pymysql進行使用。
MySQLdb 只適用于python2.x,發現pip裝不上。它在py3的替代品是: import pymysql
?
Mysql的事務
一般來說,事務是必須滿足4個條件(ACID): Atomicity(原子性)、Consistency(穩定性)、Isolation(隔離性)、Durability(可靠性)
1、事務的原子性:一組事務,要么成功;要么撤回。
2、穩定性 : 有非法數據(外鍵約束之類),事務撤回。
3、隔離性:事務獨立運行。一個事務處理后的結果,影響了其他事務,那么其他事務會撤回。事務的100%隔離,需要犧牲速度。
4、可靠性:軟、硬件崩潰后,InnoDB數據表驅動會利用日志文件重構修改。可靠性和高速度不可兼得, innodb_flush_log_at_trx_commit選項 決定什么時候吧事務保存到日志里
?
安裝Mysql
1.上官網,下源碼包
?
2.安裝依賴工具:
yum?-y?install?make?gcc-c++?cmake?bison-devel?ncurses-devel?libaio?libaio-devel?perl-Data-Dumper?net-tools3. 解壓
rzcd?/usr/local/srctar?xzvf?mysql-5.6.32.tar.gzcd?mysql-5.6.324.編譯:
cmake?-DCMAKE_INSTALL_PREFIX=/export/servers/mysql/?-DMYSQL_DATADIR=/export/Data/mysql/data?-DSYSCONFDIR=/export/servers/mysql/etc?-DWITH_INNOBASE_STORAGE_ENGINE=1?-DWITH_PERFSCHEMA_STORAGE_ENGINE=1?-DDEFAULT_CHARSET=utf8?-DDEFAULT_COLLATION=utf8_general_ci?-DMYSQL_UNIX_ADDR=/export/Data/mysql/tmp/mysql.sock?-DENABLED_LOCAL_INFILE=ON?-DENABLED_PROFILING=ON?-DWITH_DEBUG=0?-DMYSQL_TCP_PORT=3358?
DCMAKE_INSTALL_PREFIX | /usr/local/mysql | 安裝目錄 |
DMYSQL_DATADIR | /usr/local/mysql/data | 數據庫位置 |
DSYSCONFDIR | /etc | 配置文件位置 |
DWITH_MYISAM_STORAGE_ENGINE | 1 | 安裝myisam存儲引擎 |
DWITH_INNOBASE_STORAGE_ENGINE | 1 | 安裝innodb存儲引擎 |
DWITH_MEMORY_STORAGE_ENGINE | 1 | 安裝memory存儲引擎 |
DWITH_READLINE | 1 | 快捷鍵功能 |
DMYSQL_UNIX_ADDR | /var/lib/mysql/mysql.sock | Unix socket 文件路徑 |
DMYSQL_TCP_PORT | 3306 | MySQL監聽端口 |
DENABLED_LOCAL_INFILE | 1 | 許從本地導入數據- |
DWITH_PARTITION_STORAGE_ENGINE | 1 | 安裝數據庫分區 |
DEXTRA_CHARSETS | all | 安裝所有擴展字符集 |
DDEFAULT_CHARSET | utf8 | 使用utf8字符 |
DDEFAULT_COLLATION | utf8_general_ci | 校驗字符 |
如圖所示編譯成功,每次進行echo $?進行驗證
make?&&?make?install5.創建mysql用戶=并賦權
useradd?mysql?-s?/sbin/nologinchown?-R?mysql:mysql?/export/servers/mysql?/export/Data/mysql6.初始化系統表:
cd?/export/servers/mysql/scripts./mysql_install_db?--basedir=/export/servers/mysql/?--datadir=/export/Data/mysql/data?--user=mysqlmkdir?-p?/export/servers/mysql/etccp?/export/servers/mysql/my.cnfyum?remove?-y?mysql7.啟動mysql
cd?/export/servers/mysqlcp?support-files/mysql.server?/etc/init.d/mysqld檢查配置文件的datadir,basedir等是否正確
service?mysqld?start8.檢查mysql是否啟動成功
ps?-ef?|grep?mysqlnetstat?-lnp?|grep?mysql9.如果啟動不了,就在/export/Data/mysql/data找`hostname`.err對應的日志查看
Mysql常用操作
?授權超級用戶:
?grant all privileges on *.* to 'fengxiaoqing'@'%' identified by 'admin@123' with grant option;
?查看庫:
?show databases;
?查看都有哪些庫? show databases;
?查看某個庫的表 use db; show tables \G;
?查看表的字段 desc tb;
?查看建表語句 show create table tb;
?當前是哪個用戶? select user();
?當前庫 select database();
?創建庫 create database db1;
?創建表 create table t1 (id int, name char(40) adress varchar(30));?
?char(10)????????????? 'aaa?????? '
?varchar(10)????????? 'aaa'
?查看數據庫版本 select version();
?查看mysql狀態 show status;
?修改mysql參數 show variables like 'max_connect%'; set global max_connect_errors = 1000;
?查看mysql隊列 show processlist;
?select * from information_schema.processlist where info is not null;
?sleep的可以忽略,qurey查詢的才有
?創建普通用戶并授權 grant all on *.* to databases1.user1 identified by '123456';
?grant all on db1.* to 'user2'@'10.0.2.100' identified by '111222';
?grant all on db1.* to 'user3'@'%' identified by '231222';insert into tb1 (id,name) values(1,'feng');
?更改密碼 UPDATE mysql.user SET password=PASSWORD("newpwd") WHERE user='username' ;??
?查詢 select count(*) from mysql.user; select * from mysql.db; select * from mysql.db where host like '10.0.%';
?插入 update db1.t1 set name='aaa' where id=1;?
?清空表 truncate table db1.t1;
?刪除表 drop table db1.t1;
?刪除數據庫 drop database db1;
?修復表 repair table tb1 [use frm];
?查看權限show grants for root@'localhost';
?echo "select user,host,password from mysql.user" |mysql -uroot -p123456
?mysql -uroot -p1234556 -e "select user,host,password into outfile '/home/mysql/1.txt' from mysql.user;"
Mysql的連接
?1.創建數據庫 create database python;
?2. 授權用戶
?grant all privileges on *.* to feng@’%’ identified by ‘123456’;
?flush privilege;
?conn=MySQLdb.connect(host="192.168.100.101",user="feng",passwd="123456",db="python",charset="utf8")
?
比較常用的參數包括:
?host:數據庫主機名.默認是用本地主機
?user:數據庫登陸名.默認是當前用戶
?passwd:數據庫登陸的秘密.默認為空
?db:要使用的數據庫名.沒有默認值
?port:MySQL服務使用的TCP端口.默認是3306,數字類型
?charset:數據庫編碼
?
推薦大家使用函數的方式:
def?connect_mysql():????db_config?=?{'host':?'192.168.48.128','port':?3306,'user':?'xiang','passwd':?'123456','db':?'python','charset':?'utf8'????}cnx?=?MySQLdb.connect(**db_config)return?cnx?
游標
游標(Cursor)是處理數據的一種方法,為了查看或者處理結果集中的數據,游標提供了在結果集中一次一行或者多行前進或向后瀏覽數據的能力。可以把游標當作一個指針,它可以指定結果中的任何位置,然后允許用戶對指定位置的數據進行處理
Import…………if?__name__?==?'__main__':cnx?=?connect_mysql()cus?=?cnx.cursor()sql??=?'''?create?table?test(id?int?not?null);insert?into?test(id)?values?(100);'''????try:cus.execute(sql)cus.close()cnx.commit()except?Exception?as?e:cnx.rollback()print('Error')#?raise?e????finally:cnx.close()游標常用的方法:
常用方法:
cursor():創建游標對象
Cus = connect_mysql().cursour()
close():關閉此游標對象
excute(sql[, args]):執行一個數據庫查詢或命令
fetchone():得到結果集的下一行
fetchmany([size = cursor.arraysize]):得到結果集的下幾行
fetchall():得到結果集中剩下的所有行
executemany (sql, args):執行多個數據庫查詢或命令
個人推薦,盡量不使用executemany,通過程序循環不斷調用excute函數
?
數據庫連接池
import?pymysqlfrom?DBUtils.PooledDB?import?PooledDBfrom?DBUtils.PooledDB?import?PooledDBdb_config?=?{"host":?"192.168.48.131","port":?3306,"user":?"xiang","passwd":?"xiang","db":?"python",#?"charset":?"utf8"????}spool = PooledDB(pymysql, 5, **db_config) ?# 5為連接池里的最少連接數
# def connect_myssql():
conn = spool.connection() ?# 以后每次需要數據庫連接就是用connection()函數獲取連接
cur = conn.cursor()
SQL = "select * from tmp;"
r = cur.execute(SQL)
r = cur.fetchall()
print(r)
cur.close()
conn.close()
?
轉載于:https://blog.51cto.com/fengyunshan911/2114920
總結
以上是生活随笔為你收集整理的Python中操作mysql知识(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nginx+tomcat的keepali
- 下一篇: 解决spring-session升级到2