首页 > 其他分享 >django分表存儲的model

django分表存儲的model

时间:2023-07-07 09:12:34浏览次数:42  
标签:verbose models max django 存儲 model class name

django分表存儲的model設計

import json
from django.db import models
from django.http import HttpResponse

class Object:
def init(self, **kwargs):
self.dict.update(kwargs)

def _model_new(cls, args, **kwargs):
return cls(
args, **kwargs)

class ShardModel(object):
"""
ShardModel support table horizontal partition.
"""
_shard_db_models = {}

def __new__(cls, *args, **kwargs):
    shard_key = kwargs.pop('shard_key', 0)            # % cls.Config.table_num
    model_name = cls.__name__
    model_name += '_%s' % shard_key

    model_class = cls._shard_db_models.get(model_name)
    if model_class is not None:
        return model_class

    # Deep copy attrs
    attrs = dict()
    attrs.update(cls.__dict__)
    if 'objects' in attrs:
        attrs['objects'] = attrs['objects'].__class__()

    # Set table name with shard_key
    meta = Object(**cls.Meta.__dict__)
    meta.db_table = meta.db_table % shard_key

    attrs['Meta'] = meta
    attrs['new'] = classmethod(_model_new)

    # Create model class dynamically
    model_class = type(model_name, tuple([models.Model] + list(cls.__bases__[1:])), attrs)
    cls._shard_db_models[model_name] = model_class
    return model_class

class Stockbasic(models.Model):
""" 股票基础信息数据,包括股票代码、名称、上市日期、退市日期等 """
ts_code = models.CharField(verbose_name="TS代码", max_length=20, unique=True)
symbol = models.CharField(verbose_name="股票代码", max_length=20)
name = models.CharField(verbose_name="股票名称", max_length=30)
area = models.CharField(verbose_name="地域", max_length=20)
industry = models.CharField(verbose_name="所属行业", max_length=20)
fullname = models.CharField(verbose_name="股票全称", max_length=50)
enname = models.CharField(verbose_name="英文全称", max_length=50)
cnspell = models.CharField(verbose_name="拼音缩写", max_length=10)
market = models.CharField(verbose_name="市场类型", max_length=10)
exchange = models.CharField(verbose_name="交易所代码", max_length=10)
curr_type = models.CharField(verbose_name="交易货币", max_length=10)
list_choice = (
("L", "上市"),
("D", "退市"),
("P", "暂停上市"),
)
list_status = models.SmallIntegerField(verbose_name="上市状态", choices=list_choice, default="L")
list_date = models.DateField(verbose_name="上市日期")
delist_date = models.DateField(verbose_name="退市日期")
hs_choice = (
("N", "否"),
("H", "沪股通"),
("S", "深股通"),
)
is_hs = models.SmallIntegerField(verbose_name="是否沪深港通标的", choices=hs_choice, default="N")

def __str__(self):
    return self.ts_code

class Share(ShardModel):
ts_code = models.ForeignKey(verbose_name="股票代码", to="Stockbasic", to_field="ts_code", on_delete=models.CASCADE)
trade_date = models.DateField(verbose_name="交易日期")
open = models.DecimalField(verbose_name="开盘价", max_digits=18, decimal_places=2)
high = models.DecimalField(verbose_name="最高价", max_digits=18, decimal_places=2)
low = models.DecimalField(verbose_name="最低价", max_digits=18, decimal_places=2)
close = models.DecimalField(verbose_name="收盘价", max_digits=18, decimal_places=2)
pre_close = models.DecimalField(verbose_name="昨收价(前复权)", max_digits=18, decimal_places=2)
change1 = models.DecimalField(verbose_name="涨跌额", max_digits=18, decimal_places=2)
pct_chg = models.DecimalField(verbose_name="涨跌幅", max_digits=18, decimal_places=2)
vol = models.DecimalField(verbose_name="成交量(手)", max_digits=18, decimal_places=2)
amount = models.DecimalField(verbose_name="成交额(千元)", max_digits=18, decimal_places=2)

class Meta:
    app_label = 'default'
    db_table = 'share%s'

通过继承ShardModel,Share类就具备的自动分表的功能。 在views中可通过如下方法获取table: share601018......等:

def get_share_info(request):
ts_code = int(request.GET.get('ts_code'))
share = models.User(shard_key=ts_code).objects.get(share_id=ts_code)
return HttpResponse(json.dumps(model_to_dict(share)))

标签:verbose,models,max,django,存儲,model,class,name
From: https://www.cnblogs.com/HeroZhang/p/17533851.html

相关文章

  • Unity的AssetPostprocessor之Model:深入解析与实用案例 2
    UnityAssetPostprocessor中Model相关函数的实际应用UnityAssetPostprocessor是Unity引擎中的一个重要功能,它可以在导入资源时自动一些脚本,以便对资源进行自定义处理。其中,Model相关的函数可以用于对导入的3D模型进行处理,包括修改模型的材质、纹理、网格等属性。本文将介绍Model......
  • Django创建多对多表关系的三种方式
    一、全自动(不推荐)优点:djangoorm会自动创建第三张表缺点:只会创建两个表的关系字段,不会再额外添加字段,可扩展性差classBook(models.Model):#...authors=models.ManyToManyField(to='Author')classAuthor(models.Model):#...pass 二、......
  • Django restframwork中使用分页及实现自定义分页
    关于为何要分页以及如何在Django+Template架构中如何使用分页,可以参考之前的文章django自定义分页类和使用总结[1]DjangoRestFramework中分页限制今天开篇我们先不讲如何使用,我们先说Django+restframework实现前后端分离项目开发时,分页功能使用的限制?缘由是之前在开发运维......
  • C/C++ Qt 数据库与SqlTableModel组件应用
    SqlTableModel组件可以将数据库中的特定字段动态显示在TableView表格组件中,通常设置QSqlTableModel类的变量作为数据模型后就可以显示数据表内容,界面组件中则通过QDataWidgetMapper类实例设置为与某个数据库字段相关联,则可以实现自动显示字段的内容,不仅是显示,其还支持动态增删改查......
  • django中使用form表单或者ajax提交数据时如何验证csrftoken
    使用form表单来提交数据时,如何验证csrftokenajax提交数据时验证csrftoken在需要提交的html页面引入以下js文件就行引入csrf.js文件<scriptsrc="{%static'js/csrf.js'%}"></script>文件内容:/***根据cookie的name获取对应的值*@paramname*@returns{null}......
  • Django REST framework drf 后端分页
    使用view.pyfromrest_frameworkimportpaginationclassdefault_pagination(pagination.PageNumberPagination):page_size=15#分页的条数page_query_param='page'page_size_query_param='size' classrun_sh(generics.ListCreate......
  • Django 用户权限 组权限
    创建权限fromusers.modelsimportUserfromdjango.contrib.auth.modelsimportUser,Permission,Groupfromdjango.contrib.contenttypes.modelsimportContentType#决定在那个app.models.pycontent_type=ContentType.objects.get_for_model(User)#添加权限perm=......
  • Django 数据库操作
    查询models.UserInfo.objects.all()models.UserInfo.objects.all().values('user')#只取user列models.UserInfo.objects.all().values_list('id','user')#取出id和user列,并生成一个列表models.UserInfo.objects.get(id=1)models.UserInfo.objects.get(u......
  • Vue, Django | 数据可视化平台开发
    给公司搞了个互联网设备可视化平台,在地图上展示互联网设备的信息,点击地图不同区域,统计相应的设备信息,生成图表展示出来用的vue-big-screen框架,在原框架基础上,主要干了下面几件事:1.下载不同区域的geojson数据,点击大图的不同区域,调用mapclick方法,将子区域的geojson数据加载出来2......
  • Nginx+Uwsgi+Django+Mysql部署项目
    第一章、准备工作第1节、创建项目目录准备好项目代码,将代码上传至myprojectmkdirmyproject第2节、安装python3cd/usr/local/mkdirPythonwgethttps://www.python.org/ftp/python/3.8.0/Python-3.8.0.tgztar-zxvfPython-3.8.0.tgzmkdir/usr/local/Python/py3_p......