使用pymysql包操作mysql数据库封装类
import pymysql
import os,sys
import configparser
class OperateSQL(object):
def __init__(self,configpath):
config = configparser.ConfigParser()
config.read(configpath)
#连接数据库
self.conn = pymysql.connect(host=config['address']['host'],
user=config['address']['user'],
passwd=config['address']['password'],
port=int(config['address']['port']),
db=config['address']['db'],
charset=config['address']['charset']
)
#创建游标对象
self.cursor = self.conn.cursor()
def create_db(self,name,charset='utf8',collate='utf8_general_ci'):
'''
功能:创建一个数据库
参数:name表示要创建数据表的名称;
'''
all_databases = self.show_databases()
if name.lower() in all_databases:
print("数据库{}已经被创建!".format(name))
return
try:
self.cursor.execute('create database if not exists ' + name + ' default charset ' + charset + ' collate ' + collate)
print('创建数据库"{}"成功!'.format(name))
return 0
except pymysql.Error as e:
print('Mysql Error %d: %s' %(e.args[0],e.args[1]))
def show_databases(self):
'''
功能:查看已创建的数据库
'''
try:
self.cursor.execute('show databases')
result = []
while True:
res = self.cursor.fetchone()
if res is None:
return result
result.append(res[0])
except pymysql.Error as e:
print('Mysql Error %d: %s' %(e.args[0],e.args[1]))
def select_database(self,database):
'''
功能:选择连接或者修改连接的数据库
参数:database表示要连接的数据库名称
'''
try:
self.conn.select_db(database)
return 0
except pymysql.Error as e:
print('Mysql Error %d: %s' %(e.args[0],e.args[1]))
def delete_database(self,databaseName):
'''
功能:删除指定的数据库
参数:databaseName表示要删除的数据库名称
'''
if databaseName not in self.show_databases():
print('要删除的数据库"{}"不存在!'.format(databaseName))
return
try:
self.cursor.execute('drop database ' + databaseName)
print('删除数据库"{}"成功!'.format(databaseName))
return 0
except pymysql.Error as e:
print('Mysql Error %d: %s' %(e.args[0],e.args[1]))
def check_current_database(self):
'''
功能:查看当前使用的数据库
'''
try:
self.cursor.execute('select database()')
return self.cursor.fetchone()[0] #返回当前使用数据库的名称
except pymysql.Error as e:
print('Mysql Error %d: %s' %(e.args[0],e.args[1]))
def create_table(self,tableName,command):
'''
功能:创建数据表
参数:name表示要创建数据表的名称;command表示创建数据表时,定义各字段的详细参数等。
'''
all_tables = self.show_tables() #生成器赋值给all_tables变量
for name in all_tables:
if tableName.lower() == name: #遍历当前数据库中的数据表生成器,判断是否存在相同名称的数据表
print('数据表{}已经被创建!'.format(tableName))
return
try:
self.cursor.execute('create table ' + tableName + command)
print('创建数据表"{}"成功!'.format(tableName))
return 0
except pymysql.Error as e:
print('Mysql Error %d: %s' %(e.args[0],e.args[1]))
def delete_table(self,tableName):
'''
功能:删除指定数据表
参数:tableName表示要删除的数据表名称
'''
all_tables = self.show_tables() #生成器赋值给all_tables变量
for name in all_tables:
if tableName == name: #遍历当前数据库中的数据表生成器,判断是否存在相同名称的数据表
try:
self.cursor.execute('drop table ' + tableName)
print('删除数据表"{}"成功!'.format(tableName))
return 0
except pymysql.Error as e:
print('Mysql Error %d: %s' %(e.args[0],e.args[1]))
print('要删除的数据表"{}"不存在,请确认并重新删除!'.format(tableName))
def show_tables(self):
'''
功能:查看当前数据库中有哪些已创建的数据表,以生成器的方式返回
'''
try:
if self.check_current_database() == None:
print("请先选择数据库!")
return
self.cursor.execute('show tables')
res = self.cursor.fetchone()
while res:
yield res[0] #当res值不为None时,以生成器的方式返回(防止数据库中数据表太多)
res = self.cursor.fetchone()
except pymysql.Error as e:
print('Mysql Error %d: %s' %(e.args[0],e.args[1]))
def insert_delete_updata_data(self,command):
'''
功能:向数据表中增加或删除或更新数据
参数:command表示要执行的修改数据的命令
'''
try:
if self.check_current_database() == None:
print("请先选择数据库!")
return
self.cursor.execute(command)
return 0
except pymysql.Error as e:
print('Mysql Error %d: %s' %(e.args[0],e.args[1]))
def get_data_from_table(self,command):
'''
功能:从数据表中获取数据,以生成器的形式返回
参数:command表示要执行获取数据的命令;
'''
if self.check_current_database() == None:
print("请先选择数据库!")
return
try:
self.cursor.execute(command)
res = self.cursor.fetchall()
for element in res:
yield element #防止数据表中有大量的数据,以生成器的方式返回每一项数据
except pymysql.Error as e:
print('Mysql Error %d: %s' %(e.args[0],e.args[1]))
def commit_database(self):
'''
功能:确认并提交数据
'''
try:
self.conn.commit()
return 0
except pymysql.Error as e:
print('Mysql Error %d: %s' %(e.args[0],e.args[1]))
def rollback_database(self):
'''
功能:对数据库执行回滚操作
'''
try:
self.conn.rollback()
return 0
except pymysql.Error as e:
print('Mysql Error %d: %s' %(e.args[0],e.args[1]))
def close_database(self):
'''
功能:关闭并退出数据库
'''
try:
self.cursor.close()
self.conn.close()
return 0
except pymysql.Error as e:
print('Mysql Error %d: %s' %(e.args[0],e.args[1]))