关于多数据库所遇见的那些坑

由于模拟公司业务需求,最近学习Django中,由于业务和用户分别为两个数据库所以需要使用多数据库模式, 但是在书写过程中遇到了很多的坑,再次记下以方便群友学习.

class article(models.Model):
    artId = models.IntegerField(primary_key=True, unique=True, default="0", verbose_name="文章Id")
    boardId = models.IntegerField(default="0")
    userId = models.IntegerField(default="0", verbose_name="用户Id")
    title = models.CharField(max_length=200, default="", verbose_name="文章标题")
    content = models.TextField(verbose_name="文章内容", default="")
    txt = models.CharField(max_length=50, verbose_name="文章地址")
    snapContent = models.CharField(max_length=100, verbose_name="文章简介")
    snapimage = models.CharField(max_length=100, verbose_name="图片地址")
    imgList = models.TextField(verbose_name="文章图片列表")
    money = models.DecimalField(max_digits=10, decimal_places=2, verbose_name="金额")
    cmts = models.SmallIntegerField(verbose_name="文章数")
    ups = models.SmallIntegerField(verbose_name="赞")
    downs = models.SmallIntegerField(verbose_name="踩")
    valid = models.BooleanField()
    words = models.IntegerField(verbose_name="文字数")
    tags = models.CharField(max_length=200, verbose_name="标签")
    spider = models.BooleanField()
    updindex = models.BooleanField()
    isindex = models.BooleanField()
    creatime = models.BigIntegerField(verbose_name="创建时间")
    updatime = models.BigIntegerField(verbose_name="更新时间")
    lastUpdTime = models.IntegerField(verbose_name="最后更新时间")
    nextUpdTime = models.IntegerField(verbose_name="下次更新时间")

    class Meta:
        # app_label = "Word_Cloud"  # 定义该model的app_label
        db_table = "article"
        verbose_name = "文章"
        verbose_name_plural = verbose_name

首先是连接数据库中的article表.因为django需要支持多种数据库所以所有int类型的数据都没有最大长度; 还有就是db_table是要链接的数据库表,在使用多数据库时必须注意如为缺省的话,是会以默认数据库default为连接数据库.

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': '',
        'USER': '',
        'PASSWORD': '',
        'HOST': '',
    },
    'bihu': {  # 配置第二个数据库节点名称
        'ENGINE': 'django.db.backends.mysql',
        'NAME': '',  # 第二个数据库的名称
        'USER': '',
        'PASSWORD': '',
        'HOST': '',
    },
}

DATABASE_ROUTERS = ['db_router.DatabaseAppsRouter'] DATABASE_APPS_MAPPING = { # example: # 'app_name':'database_name', 'xadmin': 'default', 'users': 'default', 'Word_Cloud': 'bihu', } 在一个就是setting中的多数据库设置问题.上面这部分代码是setting中的配置,注意app要注明所使用的数据库,否则缺省则为默认数据库.

评论 1