zoukankan      html  css  js  c++  java
  • 使用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()
    
  • 相关阅读:
    < java.util >-- Set接口
    Codeforces 627 A. XOR Equation (数学)
    Codeforces 161 B. Discounts (贪心)
    Codeforces 161 D. Distance in Tree (树dp)
    HDU 5534 Partial Tree (完全背包变形)
    HDU 5927 Auxiliary Set (dfs)
    Codeforces 27E. Number With The Given Amount Of Divisors (暴力)
    lght oj 1257
    Codeforces 219D. Choosing Capital for Treeland (树dp)
    Codeforces 479E. Riding in a Lift (dp + 前缀和优化)
  • 原文地址:https://www.cnblogs.com/ming-yuan/p/10236785.html
Copyright © 2011-2022 走看看