社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  问与答

如何用Django和mysql自动分天建表

浩宇天罡 • 10 年前 • 8804 次点击  

最近刚接手一个项目用Django和mysql写的,由于数据量过大,每天有几百万条,现在都在一个表里面查询速度太慢了,现在小弟想把每天的数据单独存放在一个表里,每天自动建表(例如:xxx_20141215)并存储数据,但是不知道怎么实现,希望大侠们帮忙解答下……

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/845
 
8804 次点击  
文章 [ 5 ]  |  最新文章 9 年前
易冷天涯
Reply   •   1 楼
易冷天涯    9 年前

提供个思路。没试过,不知道是否可行。

把表的抽象结构定义出一个Model,但记得加上

    class Meta:
        abstract=True

好了,你得到了一个模型的抽象类。抽象类在syncdb时候不会被建成表。

然后,写一个按照日期动态生成类的东东。比如你的抽象类叫MyModel的话。

def gen_model_by_date(dt=None):
    if dt is None:
        dt = datetime.datetime.today()
    new_model_name = 'MyModel_{d}'.format(d=dt.strftime('%Y%m%d'))
    new_model = type(new_model_name, (MyModel, ), {})
    return new_model

然后这张表的所有逻辑里,都用这个方法来代替原model。

django代码相关应该也许这么就搞得定吧。 至于表……写SQL每天定时建表,建表以保证不会出现要用的表还没建好的情况就行了。

没试过,不好用的话大家不要骂我……

Py站长
Reply   •   2 楼
Py站长    9 年前

@浩宇天罡 没试过 django 表名动态的做法额。。你可以搜看看

你可以每个月分一次表,每天分表有点太重了。。

olivetree
Reply   •   3 楼
olivetree    10 年前

我觉得你可以考虑分区,当然,如果历史数据不需要了,分表当然是更好的选择。

浩宇天罡
Reply   •   4 楼
浩宇天罡    10 年前

@Django中国社区 多谢解答,如果我定时让mysql自己建表的话,django的model每天都要改吗,如果不改model的话他能访问到新建的数据表吗,谢谢了~

Py站长
Reply   •   5 楼
Py站长    10 年前

你可以写SQL每天定期执行来分表,注意的是,分表时要停服。

其实你可以做成 按 用户ID来分表?