使用pymysql 操做MySQL數據庫

安裝
	pip install pymysql

	注:鏈接前要有可以使用的帳戶及有權限、可操做的數據庫


先來一個栗子:
	import pymysql

	# 鏈接database
	conn = pymysql.connect(
		host=「你的數據庫地址」, 
		user=「用戶名」,
		password=「密碼」,
		database=「數據庫名」,
		charset=「utf8」 )
		
	# 獲取一個能夠執行SQL語句的光標對象
	cursor = conn.cursor()	

	# 將結果做爲字典返回的遊標
	cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

	# 定義要執行的SQL語句
	sql = """
		CREATE TABLE USER1 (
			id INT auto_increment PRIMARY KEY ,
			name CHAR(10) NOT NULL UNIQUE,
			age TINYINT NOT NULL
		)ENGINE=innodb DEFAULT CHARSET=utf8;
	"""

	cursor.execute(sql)	# 執行SQL語句
	cursor.close()		# 關閉光標對象
	conn.close()		# 關閉數據庫鏈接

 

增刪改操做:

import pymysql

conn = pymysql.connect(host=「你的數據庫地址」, user=「用戶名」,password=「密碼」,database=「數據庫名」,charset=「utf8」)
cursor = conn.cursor()	# 默認獲取的數據是元祖類型
# cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)	# 遊標設置爲字典類型

try:
	# 返回受影響行數
	# cursor.execute(sql,[user,pwd])  # 傳參 列表,元組,字典皆可
	effect_row = cursor.execute("update tb1 set pwd = '123' where id = %s", (11,))
      
        # sql = "select * from userinfo where username=%(use)s and password=%(pas)s"
        # cursor.execute(sql,{'use':user,'pas':pwd})
	  
	# 批量執行多條SQL語句,列表套元組傳參[(,),(,)]
	effect_row = cursor.executemany("insert into tb1(user,pwd,age)values(%s,%s,%s)", [("user1","pwd1","111"),("user2","pwd2","222")])

	# 增刪改都提交,否則沒法保存數據
	conn.commit() 
	
	# 提交以後,可獲取剛插入的數據的ID,插入多條數據拿到的是最後一條的ID
	last_id = cursor.lastrowid
	
except Exception as e:

	# 插入數據失敗時, 回滾事務
	conn.rollback()
	
cursor.close()
conn.close()
 

 

查:

import pymysql
  
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='', db='t1')
cursor = conn.cursor()
cursor.execute(sql)
	
row_1 = cursor.fetchone()		# 獲取單條查詢數據
row_2 = cursor.fetchmany(3)		# 能夠獲取指定數量的數據
row_3 = cursor.fetchall()		# 獲取多條查詢數據

注:在fetch數據時按照順序進行,能夠使用cursor.scroll(num,mode)來移動遊標位置
## 光標按絕對位置移動1
## cursor.scroll(1, mode="absolute")
## 光標按照相對位置(當前位置)移動1
## cursor.scroll(1, mode="relative")
	
cursor.close()
conn.close()

 

簡單封裝:

import pymysql
from mypy3 import settings

class SqlHelper(object):
	def __init__(self):
		self.host = settings.host
		self.port = settings.port
		self.user = settings.user
		self.passwd = settings.passwd
		self.db = settings.db
		self.charset = settings.charset
		self.connect()

	def connect(self):
		self.conn = pymysql.connect(host=self.host, port=self.port, user=self.user, passwd=self.passwd, db=self.db, charset=self.charset)
		self.cursor = self.conn.cursor(cursor=pymysql.cursors.DictCursor)

	def create(self,sql,args):
		'''建立'''
		self.cursor.execute(sql,args)
		self.conn.commit()
		return self.cursor.lastrowid

	def get_one(self, sql, args):
		'''fetchone'''
		self.cursor.execute(sql, args)
		return self.cursor.fetchone()

	def get_list(self, sql, args=None):
		'''fetchall'''
		self.cursor.execute(sql, args)
		return self.cursor.fetchall()

	def modify(self,sql,args):
		'''增刪改'''
		self.cursor.execute(sql,args)
		self.conn.commit()

	def multiple_modify(self,sql,args):
		'''批量增刪改'''
		# self.cursor.executemany('insert into bd(id,name)values(%s,%s)',[(1,'name1'),(2,'name2')])
		self.cursor.executemany(sql,args)
		self.conn.commit()

	def close(self):
		self.cursor.close()
		self.conn.close()

	def __del__(self):
		self.close()
相關文章
相關標籤/搜索