最全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')