python 3连接mysql数据库

一、数据库基本操作

(1)数据库连接

  • 语法

    • 包含库:import pymysql

    • 连接数据库

      conn = pymysql.connect(
        	host=“你的数据库地址”,
          user=“用户名”,password=“密码”,
          database=“数据库名”,
          charset=“utf8”)
      
      
    • 得到一个可以执行SQL语句的光标对象

      cursor = conn.cursor()
      
  • 示例

    import pymysql
     
    # 打开数据库连接本机,root用户,密码test123,数据库TESTDB(先手动建立好)
    db = pymysql.connect("localhost","root","test123","TESTDB" )
     
    # 使用 cursor() 方法创建一个游标对象 cursor
    cursor = db.cursor()
     
    # 使用 execute()  方法执行 SQL 查询 
    cursor.execute("SELECT VERSION()")
     
    # 使用 fetchone() 方法获取单条数据.
    data = cursor.fetchone()
     
    print ("Database version : %s " % data)	# Database version : 5.5.15
     
    # 关闭数据库连接
    db.close()
    

(2)创建数据表

  • 示例

    import pymysql
     
    # 打开数据库连接
    db = pymysql.connect("localhost","root","wxc971231","TESTDB" )
     
    # 使用 cursor() 方法创建一个游标对象 cursor
    cursor = db.cursor()
     
    # 使用 execute() 方法执行 SQL,如果表存在则删除
    cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")
     
    # 使用预处理语句创建表
    sql = """CREATE TABLE EMPLOYEE (
             FIRST_NAME  CHAR(20) NOT NULL,
             LAST_NAME  CHAR(20),
             AGE INT,  
             SEX CHAR(1),
             INCOME FLOAT )ENGINE=InnoDB"""
    
    cursor.execute(sql)
     
    # 关闭数据库连接
    db.close()
    

(3)插入记录

  • 示例

    import pymysql
     
    # 打开数据库连接
    db = pymysql.connect("localhost","root","wxc971231","TESTDB" )
     
    # 使用cursor()方法获取操作游标 
    cursor = db.cursor()
     
    # SQL 插入语句
    sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
             LAST_NAME, AGE, SEX, INCOME)
             VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
    try:
       # 执行sql语句
       cursor.execute(sql)
       # 提交到数据库执行
       db.commit()
    except:
       # 如果发生错误则回滚
       db.rollback()
     
    # 关闭数据库连接
    db.close()
    
  • 另一种写法

    import pymysql
     
    # 打开数据库连接
    db = pymysql.connect("localhost","testuser","test123","TESTDB" )
     
    # 使用cursor()方法获取操作游标 
    cursor = db.cursor()
     
    # SQL 插入语句(注意varchar类型的要加引号)
    sql = "INSERT INTO student(FIRST_NAME, \
           LAST_NAME, AGE, SEX, INCOME) \
           VALUES ('{}', '{}', {},  '{}',  {})".format('Tom', 'Mohan', 20+self.count, 'M', 2000)
           
    try:
       # 执行sql语句
       cursor.execute(sql)
       # 执行sql语句
       db.commit()
    except:
       # 发生错误时回滚
       db.rollback()
     
    # 关闭数据库连接
    db.close()
    
  • 注意:

(4)查询

  • 关键方法

    • fetchone(): 该方法获取下一个查询结果集。结果集是一个对象
    • fetchall(): 接收全部的返回结果行.
    • rowcount:这是一个只读属性,并返回执行execute()方法后影响的行数。
  • 示例

    • 查询EMPLOYEE表中salary字段大于1000的所有数据:

      import pymysql
       
      # 打开数据库连接
      db = pymysql.connect("localhost","root","wxc971231","TESTDB" )
       
      # 使用cursor()方法获取操作游标 
      cursor = db.cursor()
       
      # SQL 查询语句
      sql = "SELECT * FROM EMPLOYEE \
             WHERE INCOME >{
              
              }".format(1000)
             
      try:
         # 执行SQL语句
         cursor.execute(sql)
         # 获取所有记录列表
         results = cursor.fetchall()
         for row in results:
            fname = row[0]
            lname = row[1]
            age = row[2]
            sex = row[3]
            income = row[4]
             # 打印结果
            print ("fname=%s,lname=%s,age=%s,sex=%s,income=%s" % \
                   (fname, lname, age, sex, income ))
      except:
         print ("Error: unable to fetch data")
       
      # 关闭数据库连接
      db.close()
      

(5)更新数据

  • TESTDB表中 SEX字段 为'M'的记录的AGE字段递增 1:

    import pymysql
     
    # 打开数据库连接
    db = pymysql.connect("localhost","root","wxc971231","TESTDB" )
     
    # 使用cursor()方法获取操作游标 
    cursor = db.cursor()
     
    # SQL 更新语句
    sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '%c'" % ('M')
    
    try:
       # 执行SQL语句
       cursor.execute(sql)
       # 提交到数据库执行
       db.commit()
    except:
       # 发生错误时回滚
       db.rollback()
     
    # 关闭数据库连接
    db.close()
    

(6)删除数据

  • 示例

    import pymysql
     
    # 打开数据库连接
    db = pymysql.connect("localhost","testuser","wxc971231","TESTDB" )
     
    # 使用cursor()方法获取操作游标 
    cursor = db.cursor()
     
    # SQL 删除语句
    sql = "DELETE FROM EMPLOYEE WHERE AGE > %s" % (20)
    try:
       # 执行SQL语句
       cursor.execute(sql)
       # 提交修改
       db.commit()
    except:
       # 发生错误时回滚
       db.rollback()
     
    # 关闭连接
    db.close()
    

二、注意

  1. sql命令的字符串时,注意varchar型要加引号的,或者用下面这种写法

    • 写入时

      sql = "INSERT INTO student(FIRST_NAME, \
             LAST_NAME, AGE, SEX, INCOME,create_time) \
             VALUES ( %s, %s, %s,  %s,  %s,%s)"
      try:
      	cursor.execute(sql,('小明', 'Mohan', 20+self.count, 'M', 2000,timestamp))
      	....
      
    1. 读出时

      results = cursor.fetchall()
      for row in results:
      	fname = row[0]
      	lname = row[1]
      	age = row[2]
      	sex = row[3]	
          time = row[4]
      	income = row[5]
      
  2. 每一次执行数据库操作,都要

    • 连接数据库
    • 获取游标
    • 游标执行sql
    • commit提交(如果使用的是InnoDB引擎)
  3. 示例

    db = pymysql.connect("localhost","root","wxc971231","TESTDB")
    cursor = db.cursor()    
    sql = "INSERT INTO student(FIRST_NAME, \
            LAST_NAME, AGE, SEX, INCOME) \
            VALUES ('{}', '{}', {
          
          },  '{}',  {
          
          })".format('小明', 'Mohan', 20+self.count, 'M', 2000)
      
    try:
    	cursor.execute(sql)
        db.commit()
    	print("更新成功,影响%s行"%cursor.rowcount)	# 如果涉及写操作可以加这句
    except Exception as e:	# 注意获取异常的方式
    	print(e)
        db.rollback()
    db.close()
    

三、参考

猜你喜欢

转载自blog.csdn.net/wxc971231/article/details/107873791