python 一些代码使用模式作为SQL-Alchemy的声明基础,以及对Celery分支的支持。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 一些代码使用模式作为SQL-Alchemy的声明基础,以及对Celery分支的支持。相关的知识,希望对你有一定的参考价值。


from sqlalchemy import create_engine, MetaData, Table
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from multiprocessing.util import register_after_fork


Base = declarative_base()


_ENGINES = {}
_SESSIONS = {}

DATABASE_URL='insert ur here'

# https://github.com/celery/celery/blob/master/celery/backends/database/session.py#L27-L46

class _after_fork(object):
    registered = False

    def __call__(self):
        self.registered = False  # child must reregister
        for engine in list(_ENGINES.values()):
            engine.dispose()
        _ENGINES.clear()
        _SESSIONS.clear()
after_fork = _after_fork()

def get_engine(dburi, **kwargs):
    try:
        return _ENGINES[dburi]
    except KeyError:
        engine = _ENGINES[dburi] = create_engine(dburi, **kwargs)
        after_fork.registered = True
        register_after_fork(after_fork, after_fork)
        return engine


def create_session(dburi, short_lived_sessions=False, **kwargs):
    engine = get_engine(dburi, **kwargs)
    if short_lived_sessions or dburi not in _SESSIONS:
        _SESSIONS[dburi] = sessionmaker(bind=engine)
    return engine, _SESSIONS[dburi]

engine = create_engine(DATABASE_URL)
metadata = MetaData(bind=engine)

session_maker = create_session(DATABASE_URL)[1]


class SessionPropertyMixin(object):
    def save(self, session=None, commit=True, close=False):
        if session:
            session.add(self)
            session.commit()
        if close:
            session.close()


# Reflect each database table we need to use, via schemas.
class Slugs(Base, SessionPropertyMixin):
    __table__ = Table('slugs', metadata, autoload=True)

以上是关于python 一些代码使用模式作为SQL-Alchemy的声明基础,以及对Celery分支的支持。的主要内容,如果未能解决你的问题,请参考以下文章

在字节模式下打开的python中的文件中写入换行符( n)

python笔记第九天 装饰器

Python《大话设计模式》Python版代码实现

《大话设计模式》Python版代码实现

Python 装饰器作为 Dash 中的回调使用作为实例变量的 Dash 对象 - 失败

设计模式(总纲)