当前位置: 首页 > 知识库问答 >
问题:

如何建立数据库关系以允许不同类型的用户在SqlAlchemy中注册

洪通
2023-03-14

类User(UserMixin,db.model): '''用户属性''' id=db.column(db.integer,primary_key=true) role=db.column(db.string(10),nullable=false) name=db.column(db.string(50),nullable=false) email=db.column(db.string(50),unique=true,nullable=false) password_hash=db.column(db.string(250),nullable=false) status=db.column(db.string(15),server_default=“Pending”) registration_date=db.column(db.datetime,server_default=db.func.current_timestamp()) zpeedr=db.relationship('zpeedr',backref='user',uselist=false) merchant=db.relationship('merchant‘,backref='user’,uselist=false)

def __init__(self, role, name, email, password_hash, status, registration_date, zpeedr, merchant):
    self.role = role
    self.name = name
    self.email = email
    self.password_hash = password_hash
    self.status = status
    self.registration_date = registration_date
    self.zpeedr = zpeedr
    self.merchant = merchant

类Zpeedr(db.model): ''Zpeedr属性''' id=db.column(db.integer,primary_key=true) #到用户表的外键 user_id=db.column(db.integer,db.foreignkey('user.id'),nullable=false,unique=true) 地址=db.column(db.string(200),nullable=false) 位置=db.column(db.string(50),nullable=false) zipcode=db.column(db.string(10),nullable=false) 联系人=db.column(db.string(15),nullable=false) vat=db.column(db.string(20),nullable=false,unique=true) nin=db.column(db.string(20),nullable=false,unique=true)

def __init__(self, user_id, address, location, zipcode, contact, vat, nin):
    self.user_id = user_id
    self.address = address
    self.location = location
    self.zipcode = zipcode
    self.contact = contact
    self.vat = vat
    self.nin = nin

类Merchant(db.model): '''商户物业''' id=db.column(db.integer,primary_key=true) #ForeignKey到用户表 user_id=db.column(db.integer,db.foreignkey('user.id'),nullable=false,unique=true) ticker=db.column(db.string(4),nullable=false) category=db.column(db.string(10),nullable=false) 地址=db.column(db.string(200),nullable=false) 位置=db.column(db.string(50),nullable=false) zipcode=db.column(db.string(10),nullable=false) 联系人=db.column(db.string(15),nullable=false) vat=db.column(db.string(20),nullable=false,unique=true) nin=db.column(db.string(20),nullable=false,unique=true) #与Support_merchant表建立关系(一对多) support_merchant=db.relationship('support_merchant‘,backref='merchant

共有1个答案

邴俊达
2023-03-14

如果表用户的目的只是存储公共数据,那么可以使用postgres继承。

在一个非常简单的模型中,可以有:包含所有公共数据的父表

create table user_(
  type varchar(1)
  );

和你的孩子们:

 create table zeepdr(
   id integer primary key,
   nin varchar
   ) inherits(user_);

 create table merchant(
   id integer primary key,
   ticker char(4)
  ) inherits(user_);
Table("zeepdr", metadata, ..., postgresql_inherits="user_")

基本用法

插入

根据我对山羊的看法,您不需要既不是merchant也不是zeepdr的用户,所以您将插入数据,就像父表不存在一样:

insert into zeepdr(id, type, nin) values(1,'Z','a');
insert into merchant(id, type, ticker) values(1,'M','aaaa');
select * from zeepdr;
select * from ONLY user_;
result = table.select().with_hint(table, 'ONLY', 'postgresql')

只继承check或not-null constaints,除非您使用no inherity。其他类型不继承。

最后同样重要的是

这里有关于继承和SQLAlchemy的更多信息

 类似资料:
  • 假设我们有一个带有签名的函数 是否有可能实施一个约束来确保a和b是不同的?那就是 这个问题的目的是了解更多关于Haskell的信息,并可能解决我面临的一个设计问题。如果a==b,我的特殊情况是没有意义的,所以我想在编译器级别禁止这样做。我可能会用一个完全不同的设计来解决这个问题,但这不仅仅是现在的重点--潘多拉盒子已经打开,我想知道类型级别上的等式约束是否可能。

  • 问题内容: 我有4种类型的用户,每个都有具体的数据,但他们也分享COMMUN数据,如,.. 我的第一个想法是用列创建一个主表。然后,当查询用户数据时,我可以先选择它们,然后根据运行情况选择不同的查询来获取“用户类型”的特定数据。我对此并不满意,因为我希望我可以通过一个查询并最好使用外键来获取所有与用户相关的数据。 第二个想法是在表中没有列,而是使用外键,该键来自特定用户类型的表将指向主表的一行。尽

  • 创建一个数据库 # sqlite3_createdb.py import os import sqlite3 db_filename = 'todo.db' db_is_new = not os.path.exists(db_filename) conn = sqlite3.connect(db_filename) if db_is_new: print('Need to crea

  • 问题内容: 我有两个课程,和,如下所示: 如何为这些类使用Hibernate 4的批注实现一个(单向/双向)一对多,多对一或多对多关系? 另外,我该如何配置我的一对多对象以移除孤儿,延迟加载以及在处理集合时会导致a的原因以及如何解决问题? 问题答案: 我有两个课程,和,如下所示: 创建带注释的关系 假定所有带有@Entity和注释的类@Table 单向一对一关系 由Foo.class管理的双向一对

  • 我正在用C语言开发一种象棋游戏,只是为了练习。在游戏开始时,用户可以键入4样东西: ROW

  • 关系数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。关系模型由关系数据结构、关系操作集合、关系完整性约束三部分组成。