Python 基于该值将SQLAlchemy外键ID添加到另一个表中

Python 基于该值将SQLAlchemy外键ID添加到另一个表中,python,database,sqlalchemy,flask-sqlalchemy,Python,Database,Sqlalchemy,Flask Sqlalchemy,我有两张桌子: class User(db.Model): __tablename__ = 'user' id = db.Column(INT, primary_key=True) name = db.Column(db.String(16), nullable=False) uid = db.Column(db.String(16), unique=True) department_id = db.Col

我有两张桌子:

    class User(db.Model):
        __tablename__ = 'user'

        id = db.Column(INT, primary_key=True)
        name = db.Column(db.String(16), nullable=False)
        uid = db.Column(db.String(16), unique=True)
        department_id = db.Column(INT, db.ForeignKey('department.id'), nullable=False)


    class Department(db.Model):
        __tablename__ = 'department'

        id = db.Column(INT, primary_key=True)
        name = db.Column(db.String(16), nullable=False)
        uid = db.Column(db.String(16), unique=True)
每当我添加新用户时,我总是有他们部门的名称


我怎样才能简单地使用部门名称添加新用户,而不必查询数据库来获取department.id?

如果您没有部门id,您将无法回避必须获取该部门id这一事实。通常的方式是:

dep = Department.query.filter_by(name=name).one()
usr = User(..., department_id=dep.id)
如果确实希望避免单独获取,也可以使用标量子查询代替id:

dep_id = db.session.query(Department.id).filter_by(name=name).as_scalar()
usr = User(..., department_id=dep_id)

这就是外键约束的本质。如果您之前知道该id,则使用该id,否则,您必须从db获取该id。当然,您的department_id列不能为null,那么您打算如何在SQL中插入该行呢。