# 注意:在使用过程中,sql语句中占位符不用带引号。
# 注意:本代码查询结果返回的是字典
# 注意:传入的参数应该是元组形式
import pymysql
# 注意:本代码查询结果返回的是字典
# 注意:传入的参数应该是元组形式
# 定义一个数据库相关的配置项
DB_CONFIG = {'host': '127.0.0.1',
'user': 'root',
'password': '818635',
'port': 3306,
'db': 'data_system',
'charset': 'utf8'
}
class SQLManager(object):
# 连接数据库
# 将conn,cursor作为类的属性,通过connect方法触发生成
def __init__(self):
self.conn = None
self.cur = None
self.connect()
def connect(self):
self.conn = pymysql.connect(
host=DB_CONFIG['host'],
port=DB_CONFIG['port'],
user=DB_CONFIG['user'],
password=DB_CONFIG['password'],
# db=DB_CONFIG['db'],
charset=DB_CONFIG['charset']
)
# 链接mysql
self.cur = self.conn.cursor(cursor=pymysql.cursors.DictCursor) # 注意这种方式链接数据库,查询结果返回的是字典
# 若库不存在,则创建数据库;存在,则使用
sql = 'CREATE DATABASE IF NOT EXISTS {}'.format(DB_CONFIG['db']) # 可以使用{}.format形式作为库名或表名的占位
self.cur.execute(sql)
self.cur.execute("use {}".format(DB_CONFIG['db']))
# self.conn.select_db('data_system')
# self.cur = self.conn.cursor(cursor=pymysql.cursors.DictCursor)
# return self.cur
# 判断表是否在库中
def table_exists(table_name):
sql = "show tables;"
self.cur.execute(sql)
'''
tables = con.fetchall()
table_list = []
for i in tables:
for j in i:
table_list.append(j)
print(table_list)
'''
tables = [con.fetchall()]
table_list = re.findall('(\'.*?\')', str(tables)) # 将列表转为字符串类型,以便能用正则将多重元组转为一维列表
print('table_list 1 ===>>>',table_list)
table_list = [re.sub("'", '', each) for each in table_list]
print('table_list 2 ===>>>',table_list)
if table_name in table_list:
# 存在返回1
return 1
else:
# 不存在返回0
return 0
# 查询所有数据,传入的参数要是元组形式
def many_query(self, sql, *args):
try:
self.cur.execute(sql, *args)
print('数据库操作成功!')
return self.cur.fetchall()
except Exception as e:
print('数据库查询失败!\n'+str(e))
return False
# 查询单条数据
def single_query(self, sql, *args):
try:
# print(sql)
# print(args)
self.cur.execute(sql, *args)
print('数据库操作成功!')
return self.cur.fetchone()
except Exception as e:
print('数据库操作失败!\n'+str(e))
return False
# 单条增删改数据,创建表
def modify(self, sql, *args):
try:
# print(args)
self.cur.execute(sql, *args) # 修改,由arge改为*args
self.conn.commit()
print('数据库操作成功!')
return True
except Exception as e:
print('数据库操作失败!\n'+str(e))
return False
# 批量增加数据
def many_insert(self, sql, data):
try:
self.cur.executemany(sql, data)
self.conn.commit()
print('数据库操作成功!')
return True
except Exception as e:
print('数据库操作失败!\n'+str(e))
return False
# 关闭数据库cursor和连接
def close(self):
self.cur.close()
self.conn.close()
print('数据库成功断开链接!')
if __name__ == '__main__':
db = SQLManager()
# 创建表.要注意表名和字段名用tab键上方的引号
# sql = 'DROP TABLE IF EXISTS `ci_sessions`;'
# sql = """CREATE TABLE IF NOT EXISTS `ci_sessions` (
# `session_id` VARCHAR(40) NOT NULL DEFAULT '0',
# `peopleid` INT(11) NOT NULL,
# `ip_address` VARCHAR(16) NOT NULL DEFAULT '0',
# `user_agent` VARCHAR(50) NOT NULL,
# `last_activity` INT(10) UNSIGNED NOT NULL DEFAULT '0',
# `LEFT` INT(11) NOT NULL,
# `name` VARCHAR(25) NOT NULL,
# `status` TINYINT(4) NOT NULL DEFAULT '0'
# ) ENGINE=MyISAM DEFAULT CHARSET=utf8;"""
sql = 'select * from user_table where username=%s' # 注意占位符不带引号
# sql = 'insert into user_table (username,password) values(%s,%s)'
print(db.single_query(sql,('admin')))
db.close()