2022-02-26 13:51:29 +08:00
|
|
|
#!/usr/bin/env python3
|
|
|
|
|
# -- coding:utf-8 --
|
|
|
|
|
# @Author: markushammered@gmail.com
|
|
|
|
|
# @Development Tool: PyCharm
|
|
|
|
|
# @Create Time: 2022/2/26
|
|
|
|
|
# @File Name: MySQL.py
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
from sqlalchemy import create_engine
|
|
|
|
|
from sqlalchemy.orm import sessionmaker
|
2022-02-28 21:18:05 +08:00
|
|
|
from models import * # 导入所有的主题表模型
|
2022-02-26 13:51:29 +08:00
|
|
|
from typing import List, Tuple
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class MySQL:
|
|
|
|
|
"""使用SQLAlchemy进行的MySQL数据库操作"""
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
def session(self):
|
|
|
|
|
"""
|
|
|
|
|
创建会话
|
|
|
|
|
:return:
|
|
|
|
|
"""
|
|
|
|
|
return self.Session()
|
|
|
|
|
|
|
|
|
|
def __init__(self,
|
|
|
|
|
host: str,
|
|
|
|
|
user: str,
|
|
|
|
|
pwd: str,
|
|
|
|
|
database: str,
|
|
|
|
|
charset: str = 'utf8',
|
|
|
|
|
port: int = 3306
|
|
|
|
|
) -> None:
|
|
|
|
|
"""
|
|
|
|
|
初始化
|
|
|
|
|
:param host: 数据库地址
|
|
|
|
|
:param port: 数据库端口默认3306
|
|
|
|
|
:param user: 用户名
|
|
|
|
|
:param pwd: 登陆密码
|
|
|
|
|
:param database: 数据库名
|
|
|
|
|
:param charset: 字符集 默认utf8
|
|
|
|
|
"""
|
|
|
|
|
self.host = host
|
|
|
|
|
self.port = port
|
|
|
|
|
self.user = user
|
|
|
|
|
self.password = pwd
|
|
|
|
|
self.database = database
|
|
|
|
|
self.charset = charset
|
|
|
|
|
self.engine = create_engine(
|
2022-02-28 21:18:05 +08:00
|
|
|
f'mysql+pymysql://{self.user}:{self.password}@{self.host}:{self.port}/{self.database}') # 连接到数据库
|
2022-02-26 13:51:29 +08:00
|
|
|
self.Session = sessionmaker(bind=self.engine) # 创建引擎
|
2022-02-28 21:18:05 +08:00
|
|
|
self.Base = Base
|
2022-02-26 13:51:29 +08:00
|
|
|
|
|
|
|
|
def __del__(self):
|
|
|
|
|
"""
|
|
|
|
|
自动提交
|
|
|
|
|
自动关闭连接
|
|
|
|
|
:return:
|
|
|
|
|
"""
|
|
|
|
|
self.session.commit()
|
|
|
|
|
self.session.close()
|
|
|
|
|
|
|
|
|
|
def insert(self, name: str, times: int = 0) -> bool:
|
|
|
|
|
"""
|
|
|
|
|
插入数据
|
|
|
|
|
:param name: 名称
|
|
|
|
|
:param times: 次数 默认0
|
|
|
|
|
:return:
|
|
|
|
|
"""
|
|
|
|
|
new_data = ReqCount(name=name, times=times)
|
|
|
|
|
self.session.add(new_data)
|
|
|
|
|
self.session.commit()
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
def update(self, name: str, times: int) -> bool:
|
|
|
|
|
"""
|
|
|
|
|
更新数据
|
|
|
|
|
:param name: 名称
|
|
|
|
|
:param times: 次数
|
|
|
|
|
:return:
|
|
|
|
|
"""
|
|
|
|
|
self.session.query(ReqCount).filter(ReqCount.name == name).update({'name': name, 'times': times})
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
def delete(self, name: str) -> bool:
|
|
|
|
|
"""
|
|
|
|
|
删除数据
|
|
|
|
|
:param name: 名称
|
|
|
|
|
:return:
|
|
|
|
|
"""
|
|
|
|
|
self.session.query(ReqCount).filter(ReqCount.name == name)
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
def fetch(self, name: str) -> int:
|
|
|
|
|
"""
|
|
|
|
|
查询数据
|
|
|
|
|
:param name:
|
|
|
|
|
:return:
|
|
|
|
|
"""
|
|
|
|
|
data = self.session.query(ReqCount).filter(ReqCount.name == name).all()
|
|
|
|
|
for i in data:
|
2022-02-28 21:18:05 +08:00
|
|
|
return i.times
|
2022-02-26 13:51:29 +08:00
|
|
|
|
|
|
|
|
def fetchall(self) -> List[Tuple]:
|
|
|
|
|
"""
|
|
|
|
|
抓取全部数据
|
|
|
|
|
:return:
|
|
|
|
|
"""
|
|
|
|
|
data_list = []
|
|
|
|
|
data = self.session.query(ReqCount).filter().all()
|
|
|
|
|
for tup in data:
|
|
|
|
|
data_list.append((tup.name, tup.times))
|
|
|
|
|
|
|
|
|
|
return data_list
|
|
|
|
|
|
|
|
|
|
def fetch_table(self, table_name: str) -> List[Tuple] or bool:
|
|
|
|
|
"""
|
|
|
|
|
抓取指定名称的表
|
|
|
|
|
:param table_name:
|
|
|
|
|
:return:
|
|
|
|
|
"""
|
|
|
|
|
table_list = []
|
|
|
|
|
tables = self.session.query(eval(table_name)).filter().all() # 使用eval函数将字符串转换为Python对象
|
|
|
|
|
for tup in tables:
|
|
|
|
|
table_list.append((tup.k, tup.v, tup.w, tup.h))
|
|
|
|
|
return table_list
|
2022-02-28 21:18:05 +08:00
|
|
|
|
|
|
|
|
def create(self):
|
|
|
|
|
self.Base.metadata.create_all(self.engine)
|
|
|
|
|
|