繁体   English   中英

如何正确地将查询传递给 ForeignKey 列(SQLAlchemy)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM