opsv2/libs/db/database.py
2020-12-01 16:31:04 +08:00

39 lines
1.4 KiB
Python

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# database.py
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from config import DATABASE
import os
"""
Problem:
1.StatementError: Can't reconnect until invalid transaction is rolled back
2.MYSQL has gone away
See: http://mofanim.wordpress.com/2013/01/02/sqlalchemy-mysql-has-gone-away/
Solution: http://docs.sqlalchemy.org/en/rel_0_7/core/pooling.html#setting-pool-recycle
"""
# engine = create_engine('mysql+pymysql://miles:aspect@192.168.100.30/test', pool_recycle=3600, encoding="utf-8", echo=True) #会乱码
env = os.getenv("ENV") or "dev"
print(f"env={env}")
mysql_conn = "{driven}://{user}:{pswd}@{host}/test".format(driven = DATABASE[env]['driven'],
user = DATABASE[env]['user'],
pswd = DATABASE[env]['password'],
host = DATABASE[env]['host'])
print(f"mysql_conn={mysql_conn}")
engine = create_engine(mysql_conn, pool_recycle = 60, connect_args = {"charset": "utf8"}, echo = True)
Base = declarative_base()
db_session = scoped_session(sessionmaker(bind = engine))
def create_all():
Base.metadata.create_all(bind = engine)
def drop_all():
Base.metadata.drop_all(bind=engine)