这将被视为一个挑战,只是为了知道是否有一种方法来“解决”这个问题。
我正在学习SQLAlchemy核心,现在面临从选择插入,我有这个问题
我正在从一个带有预览插入信息的表中选择信息(关于芝加哥几所学校的多个信息)。这个表有几列,但我想要的是其中的3列。
Select_stmt = select(chicago_schools_manual.columns['Name_of_School'], chicago_schools_manual.columns['Safety_Score'], chicago_schools_manual.columns['Location'])
使用SqlAlchemy将表手动Map为Table,如下所示:
('School_ID', Column('School ID', Integer(), table=<chicago_schools>, key='School_ID', primary_key=True, nullable=False))
('Name_of_School', Column('Name of School', String(), table=<chicago_schools>, key='Name_of_School'))
('Safety_Score', Column('Safety Score', Float(), table=<chicago_schools>, key='Safety_Score'))
('Location', Column('Location', String(), table=<chicago_schools>))
我正在将此信息插入到新表中。这是新表Map:
NiceSchools = Table(
'NiceSchools', metadata,
Column('id', Integer, primary_key = True, autoincrement = True),
Column('name', String (255), index = True, nullable = False),
Column('Safety_Score', Float, nullable = False, default = 0),
Column('Location', String(50), nullable = False),
Column('Start_date', DateTime, default = datetime.today())
下面是插入语句:
Insert_stmt = insert(NiceSchools).from_select(['name', 'Safety_Score', 'Location'], Select_stmt)
我面临两个问题:
1.来源列中的字段“安全分数”有时为空(源表没有非空的约束),所以在新表中插入的时候,空值会导致SQL错误,我以为有默认值就可以解决了(尝试插入null将替换默认值),但没有。我找到了一些关于postgreessql子句“on conflict”的信息,可以解决,但我使用的是DB2。如何“调整”代码以避免在新表中插入空信息?
- Name of Schools字段是源上的CLOB,有时名称比destiny字段大(当前为255,但以前的字段较小)。因此,如何截断传入的字符串以适合目标?
观察结果:我试图在SqlAlchemy中完成所有这些工作,因此,我需要在SqlAlchemy中使用任何SQL原生函数。
提前感谢!
1条答案
按热度按时间ru9i0ody1#
酒保在上面贴出了一些有用的功能。谢谢!
这样使用的一个例子。特别是因为这样的功能在SQLA网站上描述的不多。
和插入执行(无特殊功能)