【问题标题】:Insert data into specific table (sqlalchemy)将数据插入特定表(sqlalchemy)
【发布时间】:2012-10-23 15:29:04
【问题描述】:

使用 sqlalchemy 将数据插入数据库非常容易。

address.name = 'Joe'
address.age = 26
session.add(address)

但实际上我有三个表 - 如何指定要在其中插入数据的表?

【问题讨论】:

  • 你的意思是三个相似的表?

标签: python-2.7 sqlalchemy


【解决方案1】:

我通过使用sql表达式语言添加新行解决了这个问题:

engine.execute(table_addresses.insert(), name='Joe', age=20)
engine.execute(table_contacts.insert(), email='joe@something.com', cellnumber='267534320')

我通常使用 ORM,但在我的情况下它更方便。

【讨论】:

  • 如果您正在使用会话,请改为使用session.execute(table_addresses.insert().values(name='Joe', age=20))
  • 这比使用 session 更可取吗?如果表是最近动态创建的,engine.execute 可以工作吗?
【解决方案2】:

您可能想查看sqlalchemy ORM tutorial

不过,为了让你开始,我怀疑你会想要设置类似下面的东西。

from sqlalchemy import Column, Integer, String
class Address(Base):
    __tablename__ = 'addresses'

    id = Column(Integer, primary_key=True)
    name = Column(String)
    age = Column(Integer)

    def __init__(self, name, age):
        self.name = name
        self.age = age

现在看来您已经知道如何获得会话了,您可以这样做

address = Address('Joe', 26)
session.add(address)

虽然您可能只是尝试即时执行此操作,但它可能不会让您的生活更轻松,因为您仍然需要告诉它哪些对象与整数、字符串等相关,以映射到数据库表。

【讨论】:

  • 这也是我将数据添加到数据库的方式。假设数据库中有多个表,我该如何指定将数据添加到表“联系人”而不是“地址”?
  • 如上所述,您可以使用__tablename__ = 'addresses' 指定表名addresses。您是否更愿意处理几个名称不同的相同表?
  • 我可能会推荐的,如果你有不同的表,有不同的类来映射它们。 __tablename__ 将用于告诉它要匹配的数据库中的实际表。例如,根据您的contacts 示例,您可能会将class 行替换为class Contact(Base):,将__tablename__ 行替换为__tablename__ = 'contacts'。您是否尝试动态地将它们发送到不同的表中?
  • 是的,我想将它们动态添加到不同的表中
  • 当我尝试添加数据时,我不在映射类中。
猜你喜欢
  • 2018-05-17
  • 1970-01-01
  • 2019-05-02
  • 2021-07-06
  • 2020-06-01
  • 1970-01-01
  • 2014-03-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多