sqlalchemy分表处理

最近在处理公司的业务逻辑时碰到了分表的问题, 查了半天资料只发现了一种解决方案, 具体链接在 这里
但是不太符合我的想法, 所以我自己做了一些修改, 比如 我要对日志进行分表, 可以如下实现:

class DeviceOnlineLog(object):
@staticmethod
def model(month):
table_index = month
class_name = 't_dev_log_%s' % table_index
engine = get_engine(str=LOG_STRING)
Base.metadata.reflect(engine)
table = Table(
class_name,
Base.metadata,
Column('id', Integer, primary_key=True, autoincrement=True),
Column(
'devId', Integer, ForeignKey(Device.id), nullable=False),
Column('onTime', DateTime),
Column('offTime', DateTime),
extend_existing=True,
schema=MYSQL_LOG
)
table.create(engine, checkfirst=True)
return table
class Log(object):
pass
def mapperClass(cls, table, entity_name, **kw):
newcls = type(entity_name, (cls, ), {})
mapper(
newcls,
table,
# non_primary=True,
# polymorphic_on=table.c.type,
properties={
'id': table.c.id,
'devId': table.c.devId,
'onTime': table.c.onTime,
'offTime': table.c.offTime,
}
)
return newcls

上面的代码把日志表和Log对象 mapper
使用的时候可以这样:

from datetime import date
# 初始化session
table_name = date.today().strftime('%Y%m')
table = DeviceOnlineLog.model(table_name)
devId = kwargs.get('id', None)
model = mapperClass(Log, table, 'model')
query = session.query(model).filter_by(devId=devId)

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器