Python 標準數據庫接口爲 Python DB-API,Python DB-API爲開發人員提供了數據庫應用編程接口。html
Python 數據庫接口支持很是多的數據庫,你能夠選擇適合你項目的數據庫:python
Python的DB-API,爲大多數的數據庫實現了接口,使用它鏈接各數據庫後,就能夠用相同 的方式操做各數據庫。mysql
Python DB-API使用流程:c++
1. 引入API模塊。
2. 獲取與數據庫的鏈接。
3. 執行SQL語句和存儲過程。
4. 關閉數據庫鏈接。
sql
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 MySQLdb ImportError: No module named MySQLdb
安裝MySQLdb,請訪問 http://sourceforge.net/projects/mysql-python ,(Linux平臺能夠訪問:https://pypi.python.org/pypi/MySQL-python)從這裏可選擇適合您的平臺的安裝包,分爲預編譯的二進制文件和源代碼安裝包。
若是您選擇二進制文件發行版本的話,安裝過程基本安裝提示便可完成。若是從源代碼進行安裝的話,則須要切換到MySQLdb發行版本的頂級目錄,並鍵入下列命令:windows
$ 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
pip好像是不支持安裝MySQLdb的,咱們能夠經過網站下載安裝,
下載地址:https://pypi.python.org/pypi/MySQL-python/1.2.5
分別對應有windows和源碼安裝的方法bash
安裝依賴包:socket
yum install –y python-devel yum install –y mysql-devel yum install –y gcc
Python3之後好像是不支持MySQLdb了,能夠是用pymysql包,
能夠直接經過pymysql進行使用。
pip install pymysql
MySQLdb 只適用於python2.x,發現pip裝不上。它在py3的替代品是: import pymysql
通常來講,事務是必須知足4個條件(ACID): Atomicity(原子性)、Consistency(穩定性)、Isolation(隔離性)、Durability(可靠性)
一、事務的原子性:一組事務,要麼成功;要麼撤回。
二、穩定性 : 有非法數據(外鍵約束之類),事務撤回。
三、隔離性:事務獨立運行。一個事務處理後的結果,影響了其餘事務,那麼其餘事務會撤回。事務的100%隔離,須要犧牲速度。
四、可靠性:軟、硬件崩潰後,InnoDB數據表驅動會利用日誌文件重構修改。可靠性和高速度不可兼得, innodb_flush_log_at_trx_commit選項 決定何時吧事務保存到日誌裏
MariaDB [(none)]> use mysql; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed MariaDB [mysql]> show variables like 'auto%'; +--------------------------+-------+ | Variable_name | Value | +--------------------------+-------+ | auto_increment_increment | 1 | | auto_increment_offset | 1 | | autocommit | ON | | automatic_sp_privileges | ON | +--------------------------+-------+ 4 rows in set (0.01 sec) MariaDB [mysql]>
安裝Mysql
1.上官網,下源碼包
2.安裝依賴工具:
yum -y install make gcc-c++ cmake bison-devel ncurses-devel libaio libaio-devel perl-Data-Dumper net-tools
3. 解壓
rz cd /usr/local/src tar xzvf mysql-5.6.32.tar.gz cd mysql-5.6.32
4.編譯:
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 install
5.建立mysql用戶=並賦權
useradd mysql -s /sbin/nologin chown -R mysql:mysql /export/servers/mysql /export/Data/mysql
6.初始化系統表:
cd /export/servers/mysql/scripts ./mysql_install_db --basedir=/export/servers/mysql/ --datadir=/export/Data/mysql/data --user=mysql mkdir -p /export/servers/mysql/etc cp /export/servers/mysql/my.cnf yum remove -y mysql
7.啓動mysql
cd /export/servers/mysql cp support-files/mysql.server /etc/init.d/mysqld
檢查配置文件的datadir,basedir等是否正確
service mysqld start
8.檢查mysql是否啓動成功
ps -ef |grep mysql netstat -lnp |grep mysql
9.若是啓動不了,就在/export/Data/mysql/data找`hostname`.err對應的日誌查看
•受權超級用戶:
•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;"
•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 pymysql from DBUtils.PooledDB import PooledDB from DBUtils.PooledDB import PooledDB db_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()
參考文章:http://www.runoob.com/python/python-mysql.html