• 使用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()
    
  • 相关阅读:
    Spring IOC、AOP实现源码分析
    mybatis源码分析
    Android 屏幕适配
    读取sd卡下图片,由图片路径转换为bitmap
    SVN的trunk、branch、tag(二)
    SVN中tag branch trunk用法详解
    SVN使用教程之——分支、合并
    svn回滚版本2
    svn回滚版本1
    TortoiseSVN中分支和合并实践
  • 原文地址:https://www.cnblogs.com/ming-yuan/p/10236785.html
Copyright © 2020-2023  润新知