社区所有版块导航
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

定制 Django ORM / SQLAlchemy ORM 的 BaseModel

hezhiming • 7 年前 • 477 次点击  

起因

在具体项目中,一般 ORM 框架提供给我们的 Model 父类无法满足我们的要求,这时有很大动力来定制属于项目的 Model 父类。比如希望每个 Entity 都有 create_time/update_time 这几个属性,或定制其他行为,而不是在每个 Entity 里面手写对应的重复的代码。

How to do:Django ORM

Django ORM 提供了丰富的功能,因此达到这个目的很简单。只需要在 BaseModel 中提供 abstract 关键字即可。

代码如下:

from django.db import models


class BaseModel(models.Model):
    create_time = models.IntegerField(db_index=True)
    update_time = models.IntegerField(db_index=True)

    class Meta:
        abstract = True


class SomeEntity(BaseModel):
    name = models.CharField(max_length=1000)
    address = models.CharField(max_length=1000, default='')
    info = models.CharField(max_length=2000, default='')

How to do: SQLAlchemy ORM

SQLAlchemy 是另一款使用广泛的 ORM 框架,达到这个目的也十分简单(只不过查文档比较费力 )。

代码如下:

import sqlalchemy as sa
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

_Base = declarative_base(bind=sa.create_engine())


class BaseModel(_Base):
    __abstract__ = True  # 主要是这一句起作用

    # 定制基本属性
    id = sa.Column(sa.Integer, nullable=False, primary_key=True, unique=True)
    create_time = sa.Column(sa.Integer, nullable=False, index=True)
    update_time = sa.Column(sa.Integer, nullable=False, index=True)

今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/N0nEVdlFjN
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/7148
 
477 次点击