Bootstrap

最全python操作mysql数据库函数,sql语句增、改、删、查、重命名,排序等

最全python操作mysql数据库函数,涉及mysql数据库增、改、删、查、重命名和排序等sql语句,只需修改代码中的mysql数据库链接语句,就可成功使用代码中所有定义函数进行数据的存入,删除,修改等,函数中使用的sql语句可以进行拓展。

#!/usr/bin/env python
# coding: utf-8


import pymysql
import time
db=pymysql.connect(host='127.0.0.1',port=3306,user="root",passwd="****",db='sys')#连接数据库,需要先登陆mysql数据库
cursor=db.cursor()#建立游标对象


def use(db_name):
    return (cursor.execute(f'use {db_name};'),print('使用数据库:'+db_name))  #'''切换数据库,返回游标'''
def database(name):
    sql = f'create database if not exists {name}'   # '''新建数据库'''
    sql1=f'create database {name}'
    cursor.execute(sql)
    print(name+' 数据库创建成功')
def table(name,col):# '''新建数据表'''
    try:
        creat_table=f"""create table {name}(  
        {col}  varchar(255));""" 
        return (cursor.execute(creat_table),print(name+'表创建成功'))
    except:
        print(name+'表格已经存在')
def rename_col(tablename,old_col_name,new_col_name):
    sql=f'alter table {tablename} change  {old_col_name} {new_col_name} char;'#重新命名列名称
    cursor.execute(sql)
    print('重命名'+old_col_name+'列为'+new_col_name+'列')
def copy_tb(newtable,oldtable,col1,col2='id'):
    sql=f'create table {newtable}(select {col1},{col2} from {oldtable});'#复制oldtable中的col1与col2列,用于创建一个名为newtable的新表格
    cursor.execute(sql)
    print('成功复制'+oldtable+'中'+col1+'、'+col2+'列创建'+newtable+'新表格')

def tables(name,i1,i2,i3=str('none0'),i4=str('none1'),i5=str('none2'),i6=str('none3')):
    try:#默认生成6列的一个表,必须输入前两列名称,后面四列名称默认为none0-3,全为varchar(255)类型
        creat_table=f'create table {name}( {i1} varchar(255),{i2} varchar(255),{i3} varchar(255),{i4} varchar(255),{i5} varchar(255),{i6} varchar(255));'
        return (cursor.execute(creat_table),print(name+'表创建成功'))
    except:
        print(name+'表格已经存在')

def query(sql):    # '''以数据框形式返回查询据结果'''
    import pandas as pd
    cursor.execute(sql)
    data = cursor.fetchall()  # 以元组形式返回查询数据
    header = [t[0] for t in cursor.description]
    global dff
    dff = pd.DataFrame(list(data), columns=header)  # pd.DataFrem 对列表具有更好的兼容性
    return (dff)
def order(table,order_col,by_col):#按照单列升序排列另一列
    sql=f'select {order_col} from {table} order by {by_col}; '#最后加上desc表示降序排列,不加表示升序,此处没加为升序
    return (query(sql), print('按照'+by_col+'升序排列'+order_col+'列'))#只返回排序后的那一列,返回值为一个dataframe
def order_desc(table,order_col,by_col):#按照单列升序排列另一列
    sql=f'select {order_col} from {table} order by {by_col} desc; '#最后加上desc表示降序排列,不加表示升序,此处没加为升序
    return (query(sql), print('按照'+by_col+'降序序排列'+order_col+'列'))#只返回排序后的那一列,返回值为一个dataframe
def add_col(table_name,col_name):#默认添加一列,varchar(255)字符串类型
    """
    sql=f'alter table {table_name} add {col_name} varchar(255) null'
    cursor.execute(sql)
    列数太长则设置新增列为text类型:sql=f'alter table {table_name} add {col_name} text null;'
    """
    sql=f'alter table {table_name} add {col_name} varchar(255) null'
    cursor.execute(sql)
    print('成功添加'+col_name+'列到'+table_name)
def add_col_after(table,addcol,col):#alter table 表名 add column 列名 varchar(20) not null first;first代表添加到第一列
    """
    cursor.execute(f'alter table {table} add column {addcol} varchar(255) null after {col};')#table表的col列后面添加新列
    """
    cursor.execute(f'alter table {table} add column {addcol} varchar(255) null after {col};')#table表的col列后面添加新列
    print('成功添加'+addcol+'列到'+table+'的'+col+'之后')
def drop_db(db_name):# '''删除数据库'''
    sql = f'drop database if exists {db_name};'
    cursor.execute(sql)
    print(de_name+'数据库删除成功')
def drop_tb(tbl_name):
    sql = f'drop table if exists {tbl_name};'   # '''删除数据库'''
    cursor.execute(sql)
    print(tbl_name+'表删除成功')
def delete_row(table,col,cell):#删除table表格中col列中包括cell元素的所有行
    sql=f'delete from {table} where {col} = {cell}'
    cursor.execute(sql)
    print(table+'表中'+col+'列的'+cell+'元素'+'删除成功')
def delete_col(tablename,col_name):#清除tablename中col_name列,包括列名
   # try:
    sql=f'alter table {tablename} drop column {col_name};'
    cursor.execute(sql)
    print('成功删除'+tablename+'中'+col_name+'列')
   # except:
       # print('找不到'+tablename+'中的'+col_name+'列')
def delete_col_value(tablename,col_name):
    cursor.execute(f"UPDATE {tablename} SET {col_name}= NULL")#清除newtable2中col3列的所有值,只删除值,不删除名称
    print('成功删除'+tablename+'中'+col_name+'列的值')
    
def current_db():   #    '''查看当前数据库'''
    sql = 'select database();'
    return print(query(sql))
def show_db():   #    '''查看服务器上的所有数据库'''
    sql = 'show databases;'
    print('所有数据库如下:')
    return (query(sql),print(query(sql)))
def show_col(table):
    sql=f'SHOW columns FROM {table};'
    print(table+' 表格所有列如下:')
    print(query(sql))
def show_value(name):#查看name表中所有元素
    sql=f'select * from {name};'#或者单独查看列元素:(sql=‘select 列1,列2,列3等等 from 表名;’)
    print(name+'表数据如下:')
#     print(query(sql))
    return query(sql)
    
def show_tb():   #   '''查看当前数据库中所有的表'''
    sql = 'show tables;'
#     dffg=query('select database();')
    import pandas as pd
    cursor.execute('select database();')
    data = cursor.fetchall()  # 以元组形式返回查询数据
    header = [t[0] for t in cursor.description]
    dffg = pd.DataFrame(list(data), columns=header)  # pd.DataFrem 对列表具有更好的兼容性
    dffg=str(dffg)
    dffg=dffg.split(' ')
    dffg=dffg[-1]
    print(dffg+'数据库所有数据表如下:')
    return print(query(sql))

def insert(table,col1,value1):# 添加一行数据,只能添加该行中某列的一个值,该行其它列用默认值填充
    sql=f'insert into {table} ({col1}) values("%s")'%(value1)#在单列添加一个数据,其它列默认为0,可以修改增加col与value一次添加所有列
    #sql='insert into forex (forex) values("{}")'.format(value1)
    #sql='insert into table (col1) values("%s")'
    cursor.execute(sql)
    print('成功添加一行')

def update(table,update_col,value1,where_col,value2):#修改某一列数据
    sql=f'update {table} set {update_col}={value1} where {where_col}={value2};'#根据某一列的值为真修改另一列的值
    cursor.execute(sql)
    print('根据'+where_col+'列值为'+str(value1)+'修改'+update_col+'列值为'+str(value2))

    
def nickname_col(table,colname,nickname):#定义表中的列别名,即更改列名称
    sql=f'select {colname}  as {nickname} from {table};'
    print(table+'中的'+colname+'列取别名为'+nickname)
    return(print(table+'中的'+colname+'列取别名为'+nickname),query(sql)) #返回更改别名后的那一列的dataframe,可以修改同时添加多列别名
def nickname_tb(table,colname,nickname):#定义表别名
    sql=f'select {nickname}.{colname} from {table} as {nickname};'# select 表别名.列1,表别名.列2,表别名.列3 from 表名 as 表别名;
    print(table+'表'+'取别名为'+nickname)
    return query(sql) #返回更改别名后的那一列的dataframe,可以修改同时添加多列,到别名表中

#show_db()
#show_tb()
print(f'''{show_db()},
     {show_tb()}''')
print('1.use(db_name) ','2.database(name)','3.table(name) ',"4.tables(name,i1,i2,i3=str('none0') ",'5.drop_db(db_name)')
print('6.drop_table(tbl_name) ','7.query(sql)', '8.show_db()', ' 9.current_db() ',' 10.show_tables()' ,'11.delete(table,col,cell)','show_col(table)','show_value(name)')
print('delete_col(tablename,col_name)','add_col(table_name,col_name)','rename_col(tablename,col_name,new_col_name)','update','insert','nickname_tb','order','nickname')







;