【发布时间】:2017-07-17 05:18:55
【问题描述】:
问题陈述 -
我想使用 SQLAlchemy 批量插入几百行。架构如下所示
all_scrips_tbl = Table('all_scrips_info', _METADATA,
Column('security_isin', String(16), primary_key=True),
Column('company_name', String(80)),
Column('nse_traded', Boolean, default=False),
Column('nse_start_date', Date,
default=datetime.date(year=2001, day=1, month=1)),
Column('bse_traded', Boolean, default=False),
Column('bse_start_date', Date,
default=datetime.date(year=2001, day=1, month=1)),
)
现在每个脚本可以是 - nse_traded=True、bse_traded=True 或两者兼有 nse_traded=True and bse_traded=True
所以我有插入语句,例如 -
对于只有nse_traded=True 的证券
ins = t.insert().values(security_isin=nstock.isin,
company_name=nstock.name,
nse_traded=True,
nse_start_date=nstart_date,
)
对于只有bse_traded=True 的证券 -
ins = t.insert().values(security_isin=bstock.isin,
company_name=bstock.name,
bse_traded=True,
bse_start_date=bstart_date)
对应nse_traded=True和bse_traded=True
我想批量插入这些语句。因此,像 values().compile 这样的带有来自 create 语句的默认值的东西会非常有用,这样我就可以使用以下内容 -
conn.execute(all_scrips_info.insert() , [ {}, {} ] )
dicts 在哪里填充了适当的默认值?
我还查看了this 问题,但这与我的要求略有不同。有一个old question on google groups 与我的要求相似。但是那里的sqlalchemy版本比较老,而且答案不是很容易理解。
我是否遗漏了一些非常明显的东西?
【问题讨论】:
-
我是否正确理解您有一个数据集,其中包含三个组的记录:(1) nse_traded、(2) bse_traded 和 (3) nse_traded 和 bse_traded,并且您想批量插入这些记录?
-
是的,没错——我还在适用的地方定义了默认值。我现在正在做的是使用
values生成insert语句并在像execute(insert)这样的循环中运行它们。我想使用execute(insert, [{}, {}]),当我没有在insert.values中明确使用它们时,使用默认值。
标签: python sqlalchemy sql-insert