pymysql操作mysql数据库

1.建库

import pymysql
# 建库
try:
    conn=pymysql.connect(
        host='127.0.0.1',
        port=3306,
        user='root',
        passwd='123456',
    )
    cur=conn.cursor()
    create_database_sql='CREATE DATABASE IF NOT EXISTS py3_tstgr DEFAULT CHARSET utf8 COLLATE utf8_general_ci;'
    cur.execute(create_database_sql)
    cur.close()
    print('创建数据库 py3_tstgr 成功!')
except pymysql.Error as e:
    print('pymysql.Error: ',e.args[0],e.args[1])

2.建表

import pymysql
# 建表
try:
    conn=pymysql.connect(
        host='127.0.0.1',
        port=3306,
        user='root',
        passwd='123456',
        db='py3_tstgr',
        charset='utf8'
    )
    cur=conn.cursor()
    cur.execute('drop table if exists user;')
    create_table_sql='''
        CREATE TABLE user(
            id int(11) DEFAULT NULL ,
            name VARCHAR(50) DEFAULT NULL ,
            password VARCHAR(30) DEFAULT NULL ,
            birthday TIMESTAMP DEFAULT now() 
        )engine=innodb DEFAULT CHARACTER set utf8;
    '''
    cur.execute(create_table_sql)
    print('创建数据库表成功!')
except pymysql.Error as e:
    print('mysql.Error: ',e.args[0],e.args[1]) 

3.增、改、删、查数据操作

import pymysql
# 数据库操作
# 连接
def db_conn(host,port,user,passwd,db_name):
    try:
        conn=pymysql.connect(
            host=host,
            port=port,
            user=user',
            passwd=password,
            db=db_name,
            charset='utf8',
        )
        # cur=conn.cursor()
        print('数据库连接成功!')
        # 返回连接
        return conn
    except pymysql.Error as e:
        print('数据库连接失败')
        print('mysql.Error: ',e.args[0],e.args[1])

def db_cur(conn):
    # 获取游标
    cur=conn.cursor()
    return cur

def db_close(cur,conn):
    # 游标关闭
    cur.close()
    # 提交事务
    conn.commit()
    # 连接关闭
    conn.close()

# 插入单行数据
def db_insert_data(sql,cur,*args):
    try:
        # print(args)
        result=cur.execute(sql,args)
        print('添加语句受影响的行数:',result)
    except Exception as e:
        print('db_insert_data error: ',e.args)

# 批量插入数据
def db_insert_datas(sql,cur,list_datas):
    try:
        result=cur.executemany(sql,list_datas)
        print('批量插入受影响的行数:',result)
    except Exception as e:
        print('db_insert_datas error: ',e.args)

# 修改单行数据
def db_update(sql,cur):
    result=cur.execute(sql)
    print('修改语句受影响的行数:',result)

# 批量修改数据
def db_update_datas(sql,cur,list_datas):
    try:
        result=cur.executemany(sql,list_datas)
        print('批量修改受影响的行数:',result)
    except Exception as e:
        print('db_update_datas error: ',e.args)

# 删除单行数据
def db_delete_data(sql,cur):
    result=cur.execute(sql)
    print('删除语句受影响的行数:',result)

# 批量删除数据
def db_delete_datas(sql,cur,list_datas):
    try:
        result=cur.executemany(sql,list_datas)
        print('批量删除受影响的行数:',result)
    except Exception as e:
        print('db_delete_datas error: ',e.args)

# 回滚
def roll_back(conn):
    try:
        conn.rollback()
        print('回滚完成!')
    except Exception as e:
        print('rollback error: ',e.args)

def db_select_data(sql,cur):
    result=cur.execute(sql)
    print('查询语句受影响的行数:',result)

def db_select_datas(sql,cur,list_datas):
    try:
        result=cur.executemany(sql,list_datas)
        print('批量查询受影响的行数:',result)
    except Exception as e:
        print('db_select_datas error: ',e.args)

if __name__=="__main__":

    host='127.0.0.1'
    port=3306
    user='root'
    passwd='123456'
    db='py3_tstgr'
    conn=db_conn(host,port,user,passwd,db)
    print(conn)
    cur=db_cur(conn)
    print(cur)
    
    insert_sql="insert into user values(1,'tom','123','1990-01-01');"
    db_insert_data(insert_sql,cur)

    insert_sql2="insert into user values(%s,%s,%s,%s);"
    db_insert_data(insert_sql2,cur,2,'lucy','aaa','1991-02-02')
    
    insert_datas_sql="insert into user values(%s,%s,%s,%s);"
    list_datas=[(2,'ha2','222','1992-02-02'),(3,'ha3','333','1993-03-03'),(4,'ha4','444','1994-04-04')]
    db_insert_datas(insert_datas_sql,cur,list_datas)
    
    # 查询数据
    sql="select * from user;"
    cur.execute(sql)
    res1=cur.fetchone()   # 获取一行数据
    print(res1)
    res2=cur.fetchmany(2)  #获取多行数据
    print(res2)
    res3=cur.fetchall()  # 获取所有数据
    print(res3)
    print(cur.fetchone())  # None
    # 重置游标
    cur.scroll(1,mode='relative')
    print(cur.fetchone())
    
    # 更新数据
    up_sql="update user set name='lala' where password='123';"
    db_update(up_sql,cur)
    
    # 批量更新数据
    up_sqls="update user set name=%s where password=%s;"
    up_datas=[('lw','123'),('lc','aaa')]
    db_update_datas(up_sqls,cur,up_datas)
    
    # 删除数据
    delete_sql="delete from user where name='lw';"
    db_delete_data(delete_sql,cur)
    
    delete_sqls="delete from user where name=%s;"
    db_delete_datas(delete_sqls,cur,[('lc'),('hah2'),('hah3')])

    # print(cur.rownumber)  # 0 获取所在行号

    # cur.scroll(0,mode='absolute')
    # cur.execute('select * from user;')

    select_sql="select * from user;"
    db_select_data(select_sql,cur)
    print(cur.fetchall())
    

    # roll_back(conn)  # 回滚
    # print(cur.rownumber)
    # cur.scroll(0, mode='absolute')
    # cur.execute('select * from user;')

    # 查询单行
    select_sql = "select * from user;"
    db_select_data(select_sql, cur)
    
    # 批量查询
    select_sqls="select * from user where name=%s;"
    db_select_datas(select_sqls,cur,[('ha1'),('ha2'),('ha3')])
    print(cur.fetchall())

    db_close(cur,conn)  # 断开连接
原文地址:https://www.cnblogs.com/reyinever/p/10869434.html