(1) 什麼是MySQLdb?
MySQLdb 是用於 Python 連接 MySQL 數據庫的接口,它實現了 Python 數據庫 API 規範 V2.0,基於 MySQL C API 上建立的。
(2) 源碼安裝 MySQLdb: https://pypi.python.org/pypi/MySQL-python
$ tar zxvf MySQL-python-.tar.gz
$ cd MySQL-python-
$ python setup.py build
$ python setup.py install
(3) MySQLdb 的使用:
#!/usr/bin/env python
coding=utf-8
import MySQLdb
def connectdb():
print('連接到mysql服務器...')
打開數據庫連接
# 用戶名:p, 密碼:12345.,用戶名和密碼需要改成你自己的mysql用戶名和密碼,並且要創建數據庫TESTDB,並在TESTDB數據庫中創建好表Student
db = MySQLdb.connect("localhost","p","12345.","TESTDB")
print('連接上了!')
return db
def createtable(db):
使用cursor()方法獲取操作遊標
cursor = db.cursor()
# 如果存在表Sutdent先刪除
cursor.execute("DROP TABLE IF EXISTS Student")
sql = """CREATE TABLE Student (
ID CHAR(10) NOT NULL,
Name CHAR(8),
Grade INT )"""
# 創建Sutdent表
cursor.execute(sql)
def insertdb(db):
使用cursor()方法獲取操作遊標
cursor = db.cursor()
# SQL 插入語句
sql = """INSERT INTO Student
VALUES ('001', 'CZQ', 70),
('002', 'LHQ', 80),
('003', 'MQ', 90),
('004', 'WH', 80),
('005', 'HP', 70),
('006', 'YF', 66),
('007', 'TEST', 100)"""
#sql = "INSERT INTO Student(ID, Name, Grade) \
# VALUES ('%s', '%s', '%d')" % \
# ('001', 'HP', 60)
try:
# 執行sql語句
cursor.execute(sql)
# 提交到數據庫執行
db.commit()
except:
# Rollback in case there is any error
print '插入數據失敗!'
db.rollback()
def querydb(db):
使用cursor()方法獲取操作遊標
cursor = db.cursor()
# SQL 查詢語句
#sql = "SELECT * FROM Student \
# WHERE Grade > '%d'" % (80)
sql = "SELECT * FROM Student"
try:
# 執行SQL語句
cursor.execute(sql)
# 獲取所有記錄列表
results = cursor.fetchall()
for row in results:
ID = row[0]
Name = row[1]
Grade = row[2]
# 打印結果
print "ID: %s, Name: %s, Grade: %d" % \
(ID, Name, Grade)
except:
print "Error: unable to fecth data"
def deletedb(db):
使用cursor()方法獲取操作遊標
cursor = db.cursor()
SQL 刪除語句
sql = "DELETE FROM Student WHERE Grade = '%d'" % (100)
try:
# 執行SQL語句
cursor.execute(sql)
# 提交修改
db.commit()
except:
print '刪除數據失敗!'
# 發生錯誤時回滾
db.rollback()
def updatedb(db):
使用cursor()方法獲取操作遊標
cursor = db.cursor()
# SQL 更新語句
sql = "UPDATE Student SET Grade = Grade + 3 WHERE ID = '%s'" % ('003')
try:
# 執行SQL語句
cursor.execute(sql)
# 提交到數據庫執行
db.commit()
except:
print '更新數據失敗!'
# 發生錯誤時回滾
db.rollback()
def closedb(db):
db.close()
def main():
db = connectdb() # 連接MySQL數據庫
createtable(db) # 創建表
insertdb(db) # 插入數據
print '\n插入數據後:'
querydb(db)
deletedb(db) # 刪除數據
print '\n刪除數據後:'
querydb(db)
updatedb(db) # 更新數據
print '\n更新數據後:'
querydb(db)
closedb(db) # 關閉數據庫
if name == 'main':
main()
#!/usr/bin/env python
import MySQLdb
try:
conn=MySQLdb.connect(host='localhost',user='root',passwd='root',db='test',port=3306)
cur=conn.cursor()
cur.execute('select user,password from user')
cur.close()
conn.close()
except MySQLdb.Error,e:
print "Mysql Error %d: %s" % (e.args[0], e.args[1])
#!/usr/bin/env python
#* coding:utf-8 *
import MySQLdb
try:
conn = MySQLdb.Connect(host='192.168.8.40',user='root',passwd='root',db='mysql',port=3306)
cur = conn.cursor()
rs = cur.execute('select user,password,host from user')
rs = cur.execute('create database if not exists python')
conn.select_db('python')
cur.execute('create table test(id int,info varchar(30))')
value = [1,'hi jack']
cur.execute('insert into test values(%s,%s)',value)
values = []
for i in range(20):
values.append((i,'hi jack' + str(i)))
cur.executemany('insert into test values(%s,%s)',values)
cur.execute('update test set info="i am jack" where id=3')
conn.commit()
cur.close()
conn.close()
except MySQLdb.Error,e:
print 'mysql error msg: %d,%s' % (e.args[0],e.args[1])
import MySQLdb
try:
conn = MySQLdb.Connect(host='192.168.8.40',user='root',passwd='root',db='mysql',port=3306,charset='utf8')
cur = conn.cursor()
conn.select_db('python')
count = cur.execute('select * from test')
print 'there has %s rows record' % count
result = cur.fetchone()
print result
print 'id: %s info %s' % result
result2 = cur.fetchmany(3)
for record in result2:
print record
print '=='*10
cur.scroll(0,mode='absolute')
result3 = cur.fetchall()
for record in result3:
print record[0] ,'---',record[1]
conn.commit()
cur.close()
conn.close()
except MySQLdb.Error,e:
print 'mysql error msg: %d,%s' % (e.args[0],e.args[1])
查詢後中文會顯示亂碼,但在數據庫中卻是正常的,發現用一個屬性有可搞定:
在Python代碼
conn = MySQLdb.Connect(host='localhost', user='root', passwd='root', db='python') 中加一個屬性:
改爲:
conn = MySQLdb.Connect(host='localhost', user='root', passwd='root', db='python',charset='utf8')
charset是要跟你數據庫的編碼一樣,如果是數據庫是gb2312 ,則寫charset='gb2312'。
然後,這個連接對象也提供了對事務操作的支持,標準的方法
commit() 提交
rollback() 回滾
cursor用來執行命令的方法:
callproc(self, procname, args):用來執行存儲過程,接收的參數爲存儲過程名和參數列表,返回值爲受影響的行數
execute(self, query, args):執行單條sql語句,接收的參數爲sql語句本身和使用的參數列表,返回值爲受影響的行數
executemany(self, query, args):執行單挑sql語句,但是重複執行參數列表裏的參數,返回值爲受影響的行數
nextset(self):移動到下一個結果集
cursor用來接收返回值的方法:
fetchall(self):接收全部的返回結果行.
fetchmany(self, size=None):接收size條返回結果行.如果size的值大於返回的結果行的數量,則會返回cursor.arraysize條數據.
fetchone(self):返回一條結果行.
scroll(self, value, mode='relative'):移動指針到某一行.如果mode='relative',則表示從當前所在行移動value條,如果 mode='absolute',則表示從結果集的第一行移動value條.
- PyMySQL 的使用
(1) 什麼是 PyMySQL?
PyMySQL 是 Python 中用於連接 MySQL 服務器的一個庫,它遵循 Python 數據庫 API 規範 V2.0,幷包含了 pure-Python MySQL 客戶端庫。
(2) 安裝 PyMysql:
pip install PyMysql
(3) 使用 PyMySQL:
#!/usr/bin/env python
coding=utf-8
import pymysql
def connectdb():
print('連接到mysql服務器...')
打開數據庫連接
# 用戶名:p, 密碼:12345.,用戶名和密碼需要改成你自己的mysql用戶名和密碼,並且要創建數據庫TESTDB,並在TESTDB數據庫中創建好表Student
db = pymysql.connect("localhost","hp","Hp12345.","TESTDB")
print('連接上了!')
return db
def createtable(db):
使用cursor()方法獲取操作遊標
cursor = db.cursor()
# 如果存在表Sutdent先刪除
cursor.execute("DROP TABLE IF EXISTS Student")
sql = """CREATE TABLE Student (
ID CHAR(10) NOT NULL,
Name CHAR(8),
Grade INT )"""
# 創建Sutdent表
cursor.execute(sql)
def insertdb(db):
使用cursor()方法獲取操作遊標
cursor = db.cursor()
# SQL 插入語句
sql = """INSERT INTO Student
VALUES ('001', 'CZQ', 70),
('002', 'LHQ', 80),
('003', 'MQ', 90),
('004', 'WH', 80),
('005', 'HP', 70),
('006', 'YF', 66),
('007', 'TEST', 100)"""
#sql = "INSERT INTO Student(ID, Name, Grade) \
# VALUES ('%s', '%s', '%d')" % \
# ('001', 'HP', 60)
try:
# 執行sql語句
cursor.execute(sql)
# 提交到數據庫執行
db.commit()
except:
# Rollback in case there is any error
print '插入數據失敗!'
db.rollback()
def querydb(db):
使用cursor()方法獲取操作遊標
cursor = db.cursor()
# SQL 查詢語句
#sql = "SELECT * FROM Student \
# WHERE Grade > '%d'" % (80)
sql = "SELECT * FROM Student"
try:
# 執行SQL語句
cursor.execute(sql)
# 獲取所有記錄列表
results = cursor.fetchall()
for row in results:
ID = row[0]
Name = row[1]
Grade = row[2]
# 打印結果
print "ID: %s, Name: %s, Grade: %d" % \
(ID, Name, Grade)
except:
print "Error: unable to fecth data"
def deletedb(db):
使用cursor()方法獲取操作遊標
cursor = db.cursor()
# SQL 刪除語句
sql = "DELETE FROM Student WHERE Grade = '%d'" % (100)
try:
# 執行SQL語句
cursor.execute(sql)
# 提交修改
db.commit()
except:
print '刪除數據失敗!'
# 發生錯誤時回滾
db.rollback()
def updatedb(db):
使用cursor()方法獲取操作遊標
cursor = db.cursor()
# SQL 更新語句
sql = "UPDATE Student SET Grade = Grade + 3 WHERE ID = '%s'" % ('003')
try:
# 執行SQL語句
cursor.execute(sql)
# 提交到數據庫執行
db.commit()
except:
print '更新數據失敗!'
# 發生錯誤時回滾
db.rollback()
def closedb(db):
db.close()
def main():
db = connectdb() # 連接MySQL數據庫
createtable(db) # 創建表
insertdb(db) # 插入數據
print '\n插入數據後:'
querydb(db)
deletedb(db) # 刪除數據
print '\n刪除數據後:'
querydb(db)
updatedb(db) # 更新數據
print '\n更新數據後:'
querydb(db)
closedb(db) # 關閉數據庫
if name == 'main':
main()
import pymysql
打開數據庫連接(ip/數據庫用戶名/登錄密碼/數據庫名)
db = pymysql.connect("localhost", "root", "root", "test")
使用 cursor() 方法創建一個遊標對象 cursor
cursor = db.cursor()
使用 execute() 方法執行 SQL 查詢
cursor.execute("SELECT VERSION()")
使用 fetchone() 方法獲取單條數據.
data = cursor.fetchone()
print("Database version : %s " % data)
關閉數據庫連接
db.close()
import pymysql
打開數據庫連接(ip/數據庫用戶名/登錄密碼/數據庫名)
db = pymysql.connect("localhost", "root", "root", "test")
使用 cursor() 方法創建一個遊標對象 cursor
cursor = db.cursor()
SQL 插入語句
sql = """INSERT INTO user(name)
VALUES ('Mac')"""
try:
執行sql語句
cursor.execute(sql)
提交到數據庫執行
db.commit()
except:
如果發生錯誤則回滾
db.rollback()
關閉數據庫連接
db.close()
import pymysql
打開數據庫連接(ip/數據庫用戶名/登錄密碼/數據庫名)
db = pymysql.connect("localhost", "root", "root", "test")
使用 cursor() 方法創建一個遊標對象 cursor
cursor = db.cursor()
SQL 查詢語句
sql = "SELECT * FROM user"
try:
執行SQL語句
cursor.execute(sql)
# 獲取所有記錄列表
results = cursor.fetchall()
for row in results:
id = row[0]
name = row[1]
# 打印結果
print("id=%s,name=%s" % \
(id, name))
except:
print("Error: unable to fecth data")
關閉數據庫連接
db.close()
import pymysql
打開數據庫連接(ip/數據庫用戶名/登錄密碼/數據庫名)
db = pymysql.connect("localhost", "root", "root", "test")
使用 cursor() 方法創建一個遊標對象 cursor
cursor = db.cursor()
SQL 更新語句
sql = "UPDATE user SET name = 'Bob' WHERE id = 1"
try:
執行SQL語句
cursor.execute(sql)
# 提交到數據庫執行
db.commit()
except:
發生錯誤時回滾
db.rollback()
關閉數據庫連接
db.close()
import pymysql
打開數據庫連接(ip/數據庫用戶名/登錄密碼/數據庫名)
db = pymysql.connect("localhost", "root", "root", "test")
使用 cursor() 方法創建一個遊標對象 cursor
cursor = db.cursor()
SQL 刪除語句
sql = "DELETE FROM user WHERE id = 1"
try:
執行SQL語句
cursor.execute(sql)
# 提交修改
db.commit()
except:
發生錯誤時回滾
db.rollback()
關閉數據庫連接
db.close()
- mysql.connector 的使用
(1) 什麼是 mysql.connector?
由於 MySQL 服務器以獨立的進程運行,並通過網絡對外服務,所以,需要支持 Python 的 MySQL 驅動來連接到 MySQL 服務器。
目前,有兩個 MySQL 驅動:
mysql-connector-python:是 MySQL 官方的純 Python 驅動;
MySQL-python :是封裝了 MySQL C驅動的 Python 驅動。
(2) 安裝 mysql.connector:
pip install mysql-connector-python
pip install MySQL-python
(3) 使用 mysql.connector:
#!/usr/bin/env python
coding=utf-8
import mysql.connector
def connectdb():
print('連接到mysql服務器...')
打開數據庫連接
# 用戶名:p, 密碼:12345.,用戶名和密碼需要改成你自己的mysql用戶名和密碼,並且要創建數據庫TESTDB,並在TESTDB數據庫中創建好表Student
db = mysql.connector.connect(user="p", passwd="12345.", database="TESTDB", use_unicode=True)
print('連接上了!')
return db
def createtable(db):
使用cursor()方法獲取操作遊標
cursor = db.cursor()
# 如果存在表Sutdent先刪除
cursor.execute("DROP TABLE IF EXISTS Student")
sql = """CREATE TABLE Student (
ID CHAR(10) NOT NULL,
Name CHAR(8),
Grade INT )"""
# 創建Sutdent表
cursor.execute(sql)
def insertdb(db):
使用cursor()方法獲取操作遊標
cursor = db.cursor()
# SQL 插入語句
sql = """INSERT INTO Student
VALUES ('001', 'CZQ', 70),
('002', 'LHQ', 80),
('003', 'MQ', 90),
('004', 'WH', 80),
('005', 'HP', 70),
('006', 'YF', 66),
('007', 'TEST', 100)"""
#sql = "INSERT INTO Student(ID, Name, Grade) \
# VALUES ('%s', '%s', '%d')" % \
# ('001', 'HP', 60)
try:
# 執行sql語句
cursor.execute(sql)
# 提交到數據庫執行
db.commit()
except:
# Rollback in case there is any error
print '插入數據失敗!'
db.rollback()
def querydb(db):
使用cursor()方法獲取操作遊標
cursor = db.cursor()
# SQL 查詢語句
#sql = "SELECT * FROM Student \
# WHERE Grade > '%d'" % (80)
sql = "SELECT * FROM Student"
try:
# 執行SQL語句
cursor.execute(sql)
# 獲取所有記錄列表
results = cursor.fetchall()
for row in results:
ID = row[0]
Name = row[1]
Grade = row[2]
# 打印結果
print "ID: %s, Name: %s, Grade: %d" % \
(ID, Name, Grade)
except:
print "Error: unable to fecth data"
def deletedb(db):
使用cursor()方法獲取操作遊標
cursor = db.cursor()
# SQL 刪除語句
sql = "DELETE FROM Student WHERE Grade = '%d'" % (100)
try:
# 執行SQL語句
cursor.execute(sql)
# 提交修改
db.commit()
except:
print '刪除數據失敗!'
# 發生錯誤時回滾
db.rollback()
def updatedb(db):
使用cursor()方法獲取操作遊標
cursor = db.cursor()
# SQL 更新語句
sql = "UPDATE Student SET Grade = Grade + 3 WHERE ID = '%s'" % ('003')
try:
# 執行SQL語句
cursor.execute(sql)
# 提交到數據庫執行
db.commit()
except:
print '更新數據失敗!'
# 發生錯誤時回滾
db.rollback()
def closedb(db):
db.close()
def main():
db = connectdb() # 連接MySQL數據庫
createtable(db) # 創建表
insertdb(db) # 插入數據
print '\n插入數據後:'
querydb(db)
deletedb(db) # 刪除數據
print '\n刪除數據後:'
querydb(db)
updatedb(db) # 更新數據
print '\n更新數據後:'
querydb(db)
closedb(db) # 關閉數據庫
if name == 'main':
main()
#!/usr/bin/python
#coding=utf-8
import mysql.connector
from mysql.connector import errorcode
class mysqlconnectordemo(object):
def init(self):
pass
def connect(self,conf):
try:
conn = mysql.connector.connect(**conf)
print("conn success!")
except mysql.connector.Error as err:
if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
print("Something is wrong with your user name or password")
elif err.errno == errorcode.ER_BAD_DB_ERROR:
print("Database does not exist")
else:
print(err)
else:
conn.close()
def query(self,conf,sql):
try:
conn = mysql.connector.connect(**conf)
print("conn success!")
cursor = conn.cursor()
try:
cursor.execute(sql)
values = cursor.fetchall()#返回是一個由元組構成的list,每一個元組是一行值
print type(values)
for i in values:
print i
except mysql.connector.Error as err:
print('query datas error!{}'.format(err))
except mysql.connector.Error as err:
if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
print("Something is wrong with your user name or password")
elif err.errno == errorcode.ER_BAD_DB_ERROR:
print("Database does not exist")
else:
print(err)
else:
conn.close()
def insert(self,conf,sql):
try:
conn = mysql.connector.connect(**conf)
print("conn success!")
cursor = conn.cursor()
try:
cursor.execute(sql)
conn.commit()
cursor.close()
except mysql.connector.Error as err:
print('insert datas error!{}'.format(err))
except mysql.connector.Error as err:
if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
print("Something is wrong with your user name or password")
elif err.errno == errorcode.ER_BAD_DB_ERROR:
print("Database does not exist")
else:
print(err)
else:
conn.close()
#!/usr/bin/python
#coding=utf-8
import MySQLdb
class mysqldbdemo(object):
def init(self):
pass
def connect(self):
conn = MySQLdb.connect("host_ip","user","password","database")
conn.close()
def query(self,sql):
conn = MySQLdb.connect("host_ip","user","password","database")
cursor = conn.cursor()
try:
cursor.execute(sql)
values = cursor.fetchall()#返回是一個由元組構成的tuple,每一個元組是一行值
print type(values)
for i in values:
print i
except:
print "Error: unable to fecth data"
conn.close()
def insert(self,sql):
conn = MySQLdb.connect("host_ip","user","password","database")
cursor = conn.cursor()
try:
cursor.execute(sql)
conn.commit()
except:
conn.rollback()
conn.close()