[英]How Pass Correctly The Query to ForeignKey Column (SQLAlchemy)
class Cookies(Base):
__tablename__ = "cookies"
cookie_id = Column('cookie_id', Integer(), primary_key=True)
cookie_name = Column('cookie_name', String(50), index=True)
cookie_recipe_url = Column('cookie_recipe_url', String(255))
cookie_sku = Column('cookie_sku', String(55))
quantity = Column('quantity', Integer())
@classmethod
def cooke_name_recepinet_filter(self, cname, cookercp):
return (self.cookie_name == cname, self.cookie_recipe_url == cookercp)
class Users(Base):
__tablename__ = "users"
user_id = Column('user_id', Integer(), primary_key=True)
customer_number = Column('customer_number', Integer(), autoincrement=True)
username = Column('username', String(15), nullable=False, unique=True)
email_address = Column('email_address', String(255), nullable=False)
phone = Column('phone', String(20), nullable=False)
password = Column('password', String(25), nullable=False)
created_on = Column('created_on', DateTime(), default=datetime.now)
updated_on = Column('updated_on', DateTime(), default=datetime.now, onupdate=datetime.now)
class Orders(Base):
__tablename__ = "orders"
order_id = Column('order_id', Integer(), primary_key=True)
user_id = Column('user_id', ForeignKey('users.user_id'))
class Line_Items(Base):
__tablename__ = "line_items"
line_items_id = Column('line_items_id', Integer(), primary_key=True)
order_id = Column('order_id', ForeignKey('orders.order_id'))
cookie_id = Column('cookie_id', ForeignKey('cookies.cookie_id'))
quantity = Column('quantity', Integer())
extended_cost = Column('extended_cost', Integer())
喜欢这个作品
user = db.query(models.Users).filter(models.Users.username == "edinabdiu").one()
o1 = models.Orders()
o1.user = user
db.add(o1)
db.commit()
cc = db.query(models.Cookies).filter(models.Cookies.cookie_name == "chocolate chip").first()
line1 = models.Line_Items(cookie_id=cc.cookie_id, quantity=2, extended_cost=1)
pb = db.query(models.Cookies).filter(models.Cookies.cookie_name == "peanut butter").first()
line2 = models.Line_Items(quantity=12, extended_cost=3)
line2.cookie_id = pb.cookie_id
line2.order_id = o1.order_id
db.add(line1)
db.add(line2)
db.commit()
但我认为它应该像这样工作而不指定列名,还是我错了?
line1 = models.Line_Items(cookie_id=cc, quantity=2, extended_cost=1)
line2 = models.Line_Items(quantity=12, extended_cost=3)
line2.cookie_id = pb
line2.order_id = o1
我收到此错误,如果有人对此有一些想法请提供帮助:
cursor.execute(statement, parameters) sqlalchemy.exc.InterfaceError: (sqlite3.InterfaceError) 错误绑定参数 0 - 可能是不受支持的类型。 [SQL: INSERT INTO line_items (order_id, cookie_id, quantity, extended_cost) VALUES (?, ?, ?, ?)] [参数: (<models.Orders object at 0x00000296C6DC5300>, <models.Cookies object at 0x00000296C6DFF400>, 12, 3)]
如果你想以 ORM 方式使用它,你也应该指定关系。
https://docs.sqlalchemy.org/en/14/orm/basic_relationships.html
class Line_Items(Base):
__tablename__ = "line_items"
line_items_id = Column('line_items_id', Integer(), primary_key=True)
order_id = Column('order_id', ForeignKey('orders.order_id'))
cookie_id = Column('cookie_id', ForeignKey('cookies.cookie_id'))
quantity = Column('quantity', Integer())
extended_cost = Column('extended_cost', Integer())
cookie = relationship("Cookies")
那么你可以使用
line2 = models.Line_Items(quantity=12, extended_cost=3)
line2.cookie = pb
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.