- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 FlaskSQLAlchemy 连接到 SQLite 数据库。在创建模型的实例时,它为他提供了除主键 id 之外的所有列值。
models.py(仅重要列):
class Person(db.Model):
id = db.Column(db.Integer, primary_key=True)
account_id = db.Column(db.Integer, nullable=True)
class Address(db.Model):
id = db.Column(db.Integer, primary_key=True)
order_id = db.relationship("Order", backref="address", lazy=True)
class Order(db.Model):
id = db.Column(db.Integer, primary_key=True)
product_id = db.Column(db.Integer, nullable=False) # za sada jedan item samo
person_id = db.Column(db.Integer, nullable=False)
address_id = db.Column(db.Integer, db.ForeignKey("address.id"), nullable=True)
account_id = db.Column(db.Integer, db.ForeignKey("account.id"), nullable=True)
class Account(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True)
products = db.relationship("Product", backref="seller", lazy=True)
orders = db.relationship("Order", backref="buyer", lazy=True)
class Product(db.Model):
id = db.Column(db.Integer, primary_key=True)
seller_id = db.Column(db.Integer, db.ForeignKey("account.id"), nullable=False)
当函数的这部分被执行时,我收到一个错误。
address = Address(
country=form.country.data) # and some other data
db.session.add(address)
if current_user.is_authenticated:
person = Person( # and some other data
account_id=current_user.id)
db.session.add(person)
print(person.id) #prints None
order = Order(
product_id=product.id,\
address_id=address.id,\
person_id=person.id,\
account_id=current_user.id)
db.session.add(order)
db.session.commit()
打印语句打印 id 为 None,但打印其他属性(不是关系)就好了。
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) NOT NULL constraint failed: order.person_id
[SQL: INSERT INTO "order" (product_id, person_id, date, address_id, account_id) VALUES (?, ?, ?, ?, ?)]
[parameters: (26, None, '2021-02-05 11:01:45.668675', 1, 1)]
(Background on this error at: http://sqlalche.me/e/13/gkpj)
为什么这个人的id是None?
最佳答案
您看到空值是因为您没有利用对象之间的关系。对于像这样的模型
class Address(Base):
__tablename__ = "address"
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey("user.id"), nullable=False)
address = db.Column(db.String, nullable=False)
is_default = db.Column(db.Boolean, nullable=False, default=False)
user = relationship("User", back_populates="addresses")
def __repr__(self):
return (
f"<Address(user={self.user}, address='{self.address}'"
f", is_default={self.is_default})>"
)
class User(Base):
__tablename__ = "user"
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String)
addresses = relationship("Address", back_populates="user")
def __repr__(self):
return f"<User(name='{self.name}')>"
如果我创建一个 User 对象和一个 Address 对象
def show_addr_info(addr):
print(f"id={addr.id}, user_id={addr.user_id}, user={addr.user}")
with db.orm.Session(engine, future=True) as session:
gord = User(name="Gord")
gord_addr = Address(user=gord, address="123 Old Ave", is_default=True)
show_addr_info(gord_addr)
# id=None, user_id=None, user=<User(name='Gord')>
我们可以看到主键
id
当前是
None
,外键
user_id
目前也是
None
,但 SQLAlchemy 仍然知道该地址属于
<User(name='Gord')>
通过
user
关系。
session.add_all([gord, gord_addr])
show_addr_info(gord_addr)
# id=None, user_id=None, user=<User(name='Gord')>
但在我们之后
flush()
已创建主键和外键值的 session (通过在事务中创建表行)并应用于对象
session.flush()
show_addr_info(gord_addr)
# id=1, user_id=1, user=<User(name='Gord')>
道德:避免直接操作外键值,尤其是在创建新的相关对象对时。相反,使用
relationship
关联对象并让 SQLAlchemy 为您处理键值。
关于python - "NOT NULL constraint failed"持久化 ORM 对象时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66061526/
我正在查看 SQL Server 2008 的 AdventureWorks 示例数据库,我在他们的创建脚本中看到他们倾向于使用以下内容: ALTER TABLE [Production].[Prod
我目前正在使用 PostgreSQL 9.5,想知道是否有可能在 ON CONFLICT ON CONSTRAINT 语句中包含 2 个约束的名称。我的sql如下 INSERT INTO LIVE.T
使用 htmlhelpers 可以限制你的助手将绑定(bind)到什么类型 public static HtmlString DatePicker(this HtmlHelper html,
我使用的是 Symfony 2.5,我的 Model 类如下: /** * @UserAssert\UserPasswordReset */ class ResetPassword { /** *
我有 3 个 View :A、B、C。 (A 和 B 的高度相等)开始时 B 的可见性消失,C 的顶部约束是 A 的底部,因此 C 出现在 A 下方。一段时间后,我将 A 的可见性更改为消失,将 B
在 Dojo NumberTextBox 的文档中,措辞引用了“Dojo 约束语言”,甚至包括有用的 link .不幸的是,链接指向的页面仅显示 this document has been depr
在我的表中,我有一个唯一的约束。在 hibernate 中,当我添加一个违反该约束的项目时,我想捕获它,因此它将更新而不是创建一个项目。 当我没有设置 try-catch block 时 up
我正在尝试在“或”UILabel 附近添加两条 1 像素线(由 UIViews 组成)。 除了我从 Interface Builder 中的第一张图片收到警告外,一切看起来都很好并且按预期工作: Le
我已经开始学习安卓了。我正在尝试使用 Google Map API。每次我尝试启动我的应用程序时,它都会崩溃,经过调查,我在 build.gradle 文件中发现了一个通知。 Please refer
我有自定义约束: @Target({FIELD, METHOD}) @Retention(RetentionPolicy.RUNTIME) @ConstraintComposition(Composi
我正在将 Graphql 服务器与 Prisma 一起使用。但是当我尝试运行代码时出现此错误我正在使用 const { GraphQLServer } = require('graphql-yoga'
更新到 com.android.support.constraint:constraint-layout:1.1.0 之后 约束布局崩溃说: All children of constraint la
我在 Xcode 10 中工作,在尝试向我的 View 添加一些非常简单的约束时遇到了一些错误。 我有一个 UICollectionViewCell,我正在向其添加一个 UIStackView。我调整
尝试在 Laravel 上创建一个待办事项列表应用程序,但是当我尝试单击按钮创建一个新的待办事项列表时,出现此错误: SQLSTATE[23000]: Integrity constraint vio
我正在编写一个基于网格的 View ,使用以下代码动态添加 NSLayoutConstraints for (x, column) in enumerate(board) { for (y,
我正在尝试使用 Constraint composition并希望为每个复合约束定义组,如下例所示:- 复合约束 @Target({ ElementType.FIELD, Elemen
我有一些添加了外键约束的表。它们与代码生成一起使用,以在生成的存储过程中设置特定的联接。 是否可以通过在事务中调用多个删除来覆盖这些约束,特别是 C# 中的“TransactionScope”,或者绝
我需要向现有 SQL Server 表添加约束,但前提是该表尚不存在。 我使用以下 SQL 创建约束。 ALTER TABLE [Foo] ADD CONSTRAINT [FK_Foo_Bar] FO
这是我的总输出: Executing SQL script in server ERROR: Error 1215: Cannot add foreign key constraint CREATE
我正在增加 Facebook SDK 登录按钮 (FBSDKLoginButton) 的大小。 Facebook SDK 源代码向 FBSDKLoginButton 添加了一个约束,height =
我是一名优秀的程序员,十分优秀!