【发布时间】:2012-10-23 15:29:04
【问题描述】:
使用 sqlalchemy 将数据插入数据库非常容易。
address.name = 'Joe'
address.age = 26
session.add(address)
但实际上我有三个表 - 如何指定要在其中插入数据的表?
【问题讨论】:
-
你的意思是三个相似的表?
标签: python-2.7 sqlalchemy
使用 sqlalchemy 将数据插入数据库非常容易。
address.name = 'Joe'
address.age = 26
session.add(address)
但实际上我有三个表 - 如何指定要在其中插入数据的表?
【问题讨论】:
标签: python-2.7 sqlalchemy
我通过使用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))。
engine.execute 可以工作吗?
您可能想查看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'。您是否尝试动态地将它们发送到不同的表中?