已经封装好了
import sys
import pymysql
class mysqlDemo():
def __init__(self, host, user, password, database, charset="utf8"):
connection = pymysql.connect(
host=host,
user=user,
password=password,
database=database,
charset=charset)
self.connection = connection
self.cursor = connection.cursor()
print("\033[37;41m 连接数据库成功\033[0m")
def closeDB(self):
self.cursor.close()
self.connection.close()
def createTable(self):
cursor = self.cursor
connection = self.connection
tableName = input('输入表名:')
columns = ''
while True:
print('==========================================================================='
'===========================================================================')
print("\033[37;41m 输入0则退出添加字段\033[0m")
columnName = input('输入一个字段和类型(例如 id INT auto_increment PRIMARY KEY):')
if columnName.__eq__('0'):
break
columnName = columnName.replace(',', '').strip()
columns = columns.strip() + columnName + ','
columns = columns.strip()[:-1]
sql = """
CREATE TABLE %s (
%s
)ENGINE=innodb DEFAULT CHARSET=utf8;
""" % (tableName, columns)
try:
self.cursor.execute(sql)
print("\033[37;41m 创建表成功 \033[0m")
self.closeDB()
except:
print("\033[37;41m 创建表失败 \033[0m")
print(sys.exc_info())
def dropTable(self):
cursor = self.cursor
connection = self.connection
try:
tableName = input('输入表名:')
sql = 'drop table %s ' % tableName + ';'
cursor.execute(sql)
print("\033[37;41m 删除表成功 \033[0m")
self.closeDB()
except:
print("\033[37;41m 删除表失败 \033[0m")
print(sys.exc_info())
'''
tableName 表名
columns 表的列名(str、list格式)
values 插入的数值(str、list格式)
'''
def insertToTable(self, tableName, columns, values):
cursor = self.cursor
connection = self.connection
if not ((isinstance(columns, str) and isinstance(values, str)) or (
isinstance(columns, list) and isinstance(values, list))):
print("\033[37;41m 参数columns和values类型必须是list或者str且两者保持类型一致 \033[0m")
exit(1)
if isinstance(columns, str):
temp = []
temp.append(columns)
columns = temp
temp = []
temp.append(values)
values = temp
if len(columns) != len(values):
print("\033[37;41m columns和values个数不一致 \033[0m")
exit(1)
allColumns = ''
allValues = ''
for i in columns:
allColumns = allColumns + i + ','
allValues = allValues + '%s,'
allColumns = allColumns[:-1]
allValues = allValues[:-1]
sql = 'INSERT INTO ' + tableName + '(' + allColumns + ')VALUES(' + allValues + ');'
try:
cursor.execute(sql, values)
connection.commit()
print("\033[37;41m 插入数据成功 \033[0m")
self.closeDB()
except:
print("\033[37;41m 插入数据失败 \033[0m")
print(sys.exc_info())
connection.rollback()
'''
tableName 表名
columns 列名(str、list格式)
values 对应列的的数值(str、list格式)
'''
def deleteDataFromTable(self, tableName, columns, values):
cursor = self.cursor
connection = self.connection
if not ((isinstance(columns, str) and isinstance(values, str)) or (
isinstance(columns, list) and isinstance(values, list))):
print("\033[37;41m 参数columns和values类型必须是list或者str且两者保持类型一致 \033[0m")
exit(1)
if isinstance(columns, str):
temp = []
temp.append(columns)
columns = temp
temp = []
temp.append(values)
values = temp
if len(columns) != len(values):
print("\033[37;41m columns和values个数不一致 \033[0m")
exit(1)
allColumns = ''
for i in columns:
allColumns = allColumns + i + ' = %s and '
allColumns = allColumns[:-4]
sql = 'delete from ' + tableName + ' where ' + allColumns + ';'
try:
cursor.execute(sql, values)
connection.commit()
print("\033[37;41m 删除数据成功 \033[0m")
self.closeDB()
except:
print("\033[37;41m 删除数据失败 \033[0m")
print(sys.exc_info())
connection.rollback()
'''
tableName 表名
columns 查找的列名(str、list格式)
values 对应列的的数值(str、list格式)
setColumn 更新列的列名(str、list格式)
setValue 更新列的值(str、list格式)
'''
def updateDataFromTable(self, tableName, columns, values, setColumns, setValues):
cursor = self.cursor
connection = self.connection
if not ((isinstance(columns, str) and isinstance(values, str)) or (
isinstance(columns, list) and isinstance(values, list))):
print("\033[37;41m 参数columns和values类型必须是list或者str且两者保持类型一致 \033[0m")
exit(1)
if not ((isinstance(setColumns, str) and isinstance(setValues, str)) or (
isinstance(setColumns, list) and isinstance(setValues, list))):
print("\033[37;41m 参数setColumns和setValues类型必须是list或者str且两者保持类型一致 \033[0m")
exit(1)
if isinstance(columns, str):
temp = []
temp.append(columns)
columns = temp
temp = []
temp.append(values)
values = temp
if isinstance(setColumns, str):
temp = []
temp.append(setColumns)
setColumns = temp
temp = []
temp.append(setValues)
setValues = temp
if len(columns) != len(values):
print("\033[37;41m columns和values个数不一致 \033[0m")
exit(1)
if len(setColumns) != len(setValues):
print("\033[37;41m setColumns和setValues个数不一致 \033[0m")
exit(1)
allColumns = ''
for i in columns:
allColumns = allColumns + i + ' = %s and '
allColumns = allColumns[:-4]
allSetColumns = ''
for i in setColumns:
allSetColumns = allSetColumns + i + ' = %s , '
allSetColumns = allSetColumns[:-2]
sql = 'update ' + tableName + ' set ' + allSetColumns + ' where ' + allColumns + ';'
allValues = setValues + values
try:
cursor.execute(sql, allValues)
connection.commit()
print("\033[37;41m 更新数据成功 \033[0m")
self.closeDB()
except:
print("\033[37;41m 更新数据失败 \033[0m")
print(sys.exc_info())
connection.rollback()
'''
tableName: 表名
lineNumber:显示数据条数(默认10条)
showColumns:查找的字段(默认'*')
whereColumns:筛选的字段(默认'')
whereValues=:筛选的值(默认'')
orderByColumns:排序的字段(默认'')
orderByDescOrAsc:排序是升序还是降序(默认为'' 此参数<=orderByColumns。不写此参数,一律所有字段asc)
'''
def selectDataFromTable(self, tableName, lineNumber=10, showColumns='*', whereColumns='', whereValues='',
orderByColumns='',
orderByDescOrAsc=''):
cursor = self.cursor
connection = self.connection
if not isinstance(lineNumber, int):
print("\033[37;41m 参数lineNumber类型必须是int \033[0m")
exit(1)
if not (isinstance(showColumns, str) or isinstance(showColumns, list)):
print("\033[37;41m 参数showColumns类型必须是list或者str \033[0m")
exit(1)
if not ((isinstance(whereColumns, str) and isinstance(whereValues, str)) or (
isinstance(whereColumns, list) and isinstance(whereValues, list))):
print("\033[37;41m 参数whereColumns和whereValues类型必须是list或者str且两者保持类型一致 \033[0m")
exit(1)
if not (isinstance(orderByColumns, str) or isinstance(orderByColumns, list)):
print("\033[37;41m 参数showColumns类型必须是list \033[0m")
exit(1)
if not (isinstance(orderByDescOrAsc, str) or isinstance(orderByDescOrAsc, list)):
print("\033[37;41m 参数showColumns类型必须是list \033[0m")
exit(1)
if isinstance(showColumns, str):
temp = []
temp.append(showColumns)
showColumns = temp
if isinstance(whereColumns, str):
temp = []
temp.append(whereColumns)
whereColumns = temp
temp = []
temp.append(whereValues)
whereValues = temp
if isinstance(orderByColumns, str):
temp = []
temp.append(orderByColumns)
orderByColumns = temp
temp = []
temp.append(orderByDescOrAsc)
orderByDescOrAsc = temp
if len(whereColumns) != len(whereValues):
print("\033[37;41m whereColumns和whereValues个数不一致 \033[0m")
exit(1)
if len(orderByColumns) < len(orderByDescOrAsc):
print("\033[37;41m orderByDescOrAsc个数大于orderByColumns的个数 \033[0m")
exit(1)
orderByTemp = []
orderByTemp = orderByColumns.copy()
bl = len(orderByDescOrAsc)
al = len(orderByColumns)
for i in range(al):
if i < bl:
orderByTemp[i] = orderByDescOrAsc[i]
else:
orderByTemp[i] = 'asc'
orderByDescOrAsc = orderByTemp
sql = 'select '
for i in showColumns:
if i.__eq__('*'):
sql = sql + i + ','
break
else:
sql = sql + i + ','
sql = sql[:-1]
sql = sql + ' from ' + tableName
sql = sql + ' where '
for i in whereColumns:
if i.__eq__(''):
sql = sql[:-6]
sql = sql + ' '
break
else:
sql = sql + i + ' = %s ' + 'and '
sql = sql[:-4]
sql = sql + ' order by '
for i in orderByColumns:
if i.__eq__(''):
sql = sql[:-9]
sql = sql + ' '
break
else:
sql = sql + i + ' = %s %s ' + ','
sql = sql[:-1] + ';'
allValues = []
cursor = connection.cursor(cursor=pymysql.cursors.DictCursor)
if whereValues[0].__eq__('') and orderByColumns[0].__eq__(''):
cursor.execute(sql)
else:
if not whereValues[0].__eq__(''):
allValues = allValues + whereValues.copy()
if not orderByDescOrAsc[0].__eq__(''):
allValues = allValues + orderByColumns + orderByDescOrAsc.copy()
cursor.execute(sql, allValues)
while lineNumber > 0:
info = cursor.fetchone()
if info is None:
break
print(info)
lineNumber = lineNumber - 1
self.closeDB()