Files
to_session/models/__init__.py
Administrator a0720d80dc fefdwef
2025-11-12 12:54:37 +08:00

102 lines
2.7 KiB
Python

import pymysql
from peewee import *
from playhouse.pool import PooledMySQLDatabase
pymysql.install_as_MySQLdb()
# 连接池配置
# db = PooledMySQLDatabase(
# 'haxi',
# max_connections=50,
# stale_timeout=300,
# user='project3',
# password='qw12as34',
# host='192.168.50.103',
# port=3306
# )
#
#
# class BaseModel(Model):
# class Meta:
# database = db
#
# @classmethod
# def safe_get_or_create(cls, **kwargs):
# """线程安全的获取或创建"""
# try:
# with db.atomic():
# return cls.get(**kwargs), False
# except DoesNotExist:
# try:
# with db.atomic():
# return cls.create(**kwargs), True
# except IntegrityError:
# return cls.get(**kwargs), False
#
# def save(self, *args, **kwargs):
# """使用自动连接上下文保存"""
# with db.connection_context(): # 原生连接管理
# return super().save(*args, **kwargs)
#
# @classmethod
# def get_or_create(cls, defaults=None, **kwargs):
# """使用自动连接上下文获取或创建"""
# with db.connection_context(): # 自动获取/释放连接
# return super().get_or_create(defaults=defaults, **kwargs)
# 数据库配置
db_config = {
'database': 'hx',
'user': 'hx',
'password': 'haxi@123456',
'host': '192.168.11.30',
'port': 3306
}
# # 数据库配置
# db_config = {
# 'database': 'hx',
# 'user': 'hx',
# 'password': 'haxi@123456',
# 'host': '192.168.11.30',
# 'port': 3306
# }
# 全局数据库实例
db = MySQLDatabase(
db_config['database'],
user=db_config['user'],
password=db_config['password'],
host=db_config['host'],
port=db_config['port']
)
class BaseModel(Model):
class Meta:
database = db
def save(self, *args, **kwargs):
"""在调用 save 时自动连接和关闭(若无事务)"""
db.connect(reuse_if_open=True)
try:
result = super().save(*args, **kwargs)
finally:
# 若当前没有事务且连接仍然打开,则关闭连接
if not db.in_transaction() and not db.is_closed():
db.close()
return result
@classmethod
def get_or_create(cls, defaults=None, **kwargs):
"""在调用 get_or_create 时自动连接和关闭(若无事务)"""
db.connect(reuse_if_open=True)
try:
obj, created = super().get_or_create(defaults=defaults, **kwargs)
finally:
# 若当前没有事务且连接仍然打开,则关闭连接
if not db.in_transaction() and not db.is_closed():
db.close()
return obj, created