从dict保存关系sqlalchemy对象

凯西

我正在尝试使用sqlalchemy将对象保存到Postgres数据库,但是遇到问题。下面的代码有效,但不是在位置表中一遍又一遍地保存位置,而不是保存位置“ Atlanta”的单个实例并通过外键引用多个酒店。

如何设置代码,以便在位置表中只有一个条目“亚特兰大”,并且有多个旅馆引用该位置?

这是我的代码的相关部分:

class Hotel(Base):
    __tablename__ = 'hotels'

    id = Column(Integer, primary_key=True)
    hotelName = Column(String)
    standardRate = Column(Numeric(6, 2))
    govtRate = Column(Numeric(6, 2))
    standardAvailable = Column(Boolean, nullable=False)
    govtAvailable = Column(Boolean, nullable=False)
    arrive = Column(Date, nullable=False)
    depart = Column(Date, nullable=False)
    updated = Column(DateTime, default=datetime.datetime.utcnow, nullable=False)
    location_id = Column(Integer, ForeignKey('location.id'))
    location = relationship('Location')

class Location(Base):
    __tablename__ = 'location'
    id = Column(Integer, primary_key=True)
    city = Column(String, nullable=False)

def scrape(location, arrive, depart, hotelIDs):
    hotels = []
    for id in hotelIDs:
      hotels.append({
            'hotelName': hotelName,
            'standardRate': standardRate,
            'govtRate': govtRate,
            'standardAvailable': standardAvailable,
            'govtAvailable': govtAvailable,
            'arrive': dateToISO(arrive),
            'depart': dateToISO(depart),
            'location': Location(city='Atlanta')
            })
    return hotels

def save_hotel(item):
    session = db_setup()

    hotel = Hotel(**item)
    session.commit()

hotels = scrape("atlanta", "02/20/2016", "02/21/2016", hotelIDs)
for hotel in hotels:
    save_hotel(hotel)
πόδαςὠκύς

看来您正在Locationfor语句的每次迭代上创建一个新实例:

for id in hotelIDs:
    hotels.append({
        'hotelName': hotelName,
        'standardRate': standardRate,
        'govtRate': govtRate,
        'standardAvailable': standardAvailable,
        'govtAvailable': govtAvailable,
        'arrive': dateToISO(arrive),
        'depart': dateToISO(depart),
        'location': Location(city='Atlanta')  # <- new location instance here
        })

相反,我相信您希望将所有酒店附加到一个位置,例如:

location = Location(city='Atlanta')
# or if you already have Atlanta in your database:
# location = session.query(Location).filter_by(city='Atlanta').first() 

for id in hotelIDs:
    hotel = Hotel( ... )
    location.location.append(hotel)  # append hotel instance here
    ...

# now add to session and commit

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

批量保存复杂对象SQLAlchemy

来自分类Dev

在 SQLAlchemy 中保存复杂对象

来自分类Dev

SQLAlchemy:在访问时从关系中过滤对象

来自分类Dev

SQLAlchemy关系

来自分类Dev

使用ID代替对象填充SQLAlchemy多对多关系

来自分类Dev

SQLAlchemy:筛选具有深层关系的模型对象?

来自分类Dev

多对一关系返回None对象:SqlAlchemy

来自分类Dev

使用ID而不是对象填充SQLAlchemy多对多关系

来自分类Dev

SQLAlchemy:筛选具有深层关系的模型对象?

来自分类Dev

从解析关系中获取在此保存中添加的对象

来自分类Dev

Silverstripe将对象添加/保存到has_one关系

来自分类Dev

进程中保存在 SQLAlchemy 会话中的对象

来自分类Dev

sqlalchemy设置关系

来自分类Dev

SQLAlchemy:按关系过滤

来自分类Dev

验证sqlalchemy关系

来自分类Dev

在SQLAlchemy中计算关系

来自分类Dev

Flask SQLAlchemy关系

来自分类Dev

SQLAlchemy关系级联删除

来自分类Dev

SELECT条件与SQLAlchemy的关系

来自分类Dev

永久过滤SQLAlchemy关系

来自分类Dev

Flask SQLAlchemy关系

来自分类Dev

SQLAlchemy 和烧瓶的关系

来自分类Dev

如何获得Flask-SQLAlchemy对象为Jinja模板加载关系子级?

来自分类Dev

SQLAlchemy lazy = dynamic,具有使用关联对象模式的m2m关系

来自分类Dev

通过SqlAlchemy中的关联对象进行多对多,自引用,非对称关系(Twitter模型)

来自分类Dev

使用SQLAlchemy ORM以多对一关系基于一个对象过滤查询

来自分类Dev

使用多对多关系时,Flask-SQLAlchemy返回查询中的对象

来自分类Dev

如何获得Flask-SQLAlchemy对象为Jinja模板加载关系子级?

来自分类Dev

SQLAlchemy:查询所有没有直接关系的对象

Related 相关文章

热门标签

归档