我创建了一个模型使用declarative_base()
在sql炼金术如下所示。
class SchemaOnInstance(Base):
__tablename__ = 'schema_on_instance'
__table_args__ = {
'extend_existing' : True,
'schema' : 'SFOPT_TEST_SCHEMA'
}
id = Column(Integer, primary_key=True, autoincrement=True)
created_on = Column(Time, nullable=True)
name = Column(String(100), nullable=True)
is_default = Column(String(50), nullable=True)
is_current = Column(String(50), nullable=True)
database_name = Column(String(200), nullable=True)
owner = Column(String(100), nullable=True)
comment = Column(Text, nullable=True)
options = Column(String(100), nullable=True)
retention_time = Column(Integer, nullable=True)
instance_id = Column(Integer, nullable=True)
def __repr__(self):
return "<SchemaOnInstance({})>".format(self.id)
然后我将同一个模型移植到Snowflake数据库。
该模型有一个字段id
,声明为primary_key=True
和自动增量=True
。当我尝试插入数据到表schema_on_instance
使用雪花控制台。我必须提供id
,否则它不会插入数据并返回错误。
查询(成功执行,其中提供了id
)-
INSERT INTO "SFOPT_TEST_SCHEMA".schema_on_instance (id, created_on, name, is_default, is_current, database_name, owner, comment, options, retention_time, instance_id)
VALUES (1, Null, 'Some Name', 'N', 'N', 'DEMO_DB', Null, 'Some comment', Null, 1, 1);
查询(当我完全忽略列id
时成功执行)-
INSERT INTO "SFOPT_TEST_SCHEMA".schema_on_instance (created_on, name, is_default, is_current, database_name, owner, comment, options, retention_time, instance_id)
VALUES (Null, 'Some Name', 'N', 'N', 'DEMO_DB', Null, 'Some comment', Null, 1, 1);
查询(执行失败,其中id
为空)-
INSERT INTO "SFOPT_TEST_SCHEMA".schema_on_instance (id, created_on, name, is_default, is_current, database_name, owner, comment, options, retention_time, instance_id)
VALUES (Null, Null, 'Some Name', 'N', 'N', 'DEMO_DB', Null, 'Some comment', Null, 1, 1);
它返回了一个错误-
NULL result in a non-nullable column
此方法的任务是将数据插入上述数据库表中。
def dump_schema(self):
session = self.Session()
schema_obj = []
for each_schema in self.schema:
schema_obj.append(SchemaOnInstance(created_on=each_schema[0], name=each_schema[1], is_default=each_schema[2], is_current=each_schema[3], database_name=each_schema[4], owner=each_schema[5], comment=each_schema[6], options=each_schema[7], retention_time=each_schema[8], instance_id=each_schema[9]))
session.add_all(schema_obj)
try:
x = session.commit()
except Exception as identifier:
logging.error(identifier)
来自SQLAlChemy的错误-
2020-11-23 08:01:02,215 :: ERROR :: dump_schema :: 95 :: (snowflake.connector.errors.ProgrammingError) 100072 (22000): 01987501-0b18-b6aa-0000-d5e500083d26: NULL result in a non-nullable column
[SQL: INSERT INTO "SFOPT_TEST_SCHEMA".schema_on_instance (id, created_on, name, is_default, is_current, database_name, owner, comment, options, retention_time, instance_id) VALUES (%(id)s, %(created_on)s, %(name)s, %(is_default)s, %(is_current)s, %(database_name)s, %(owner)s, %(comment)s, %(options)s, %(retention_time)s, %(instance_id)s)]
[parameters: {'id': None, 'created_on': datetime.datetime(2020, 11, 23, 0, 0, 58, 29000, tzinfo=<DstTzInfo 'America/Los_Angeles' PST-1 day, 16:00:00 STD>), 'name': 'INFORMATION_SCHEMA', 'is_default': 'N', 'is_current': 'N', 'database_name': 'DEMO_DB', 'owner': '', 'comment': 'Views describing the contents of schemas in this database', 'options': '', 'retention_time': '1', 'instance_id': 1}]
如果我们查看SQLAlChemy返回的错误中形成的查询,它考虑了列id
,其值被解释为无
。如何在不包括列id
及其值的情况下形成查询。
我的最终目标是使用SQLAlchemy将数据插入Snowflake数据库表。我希望雪花数据库表自动增加id
的值。
我该如何消除这个错误。
我认为您需要在定义表时包含一个序列,以使其工作:SQLAlChemy自动增量行为
Sequence是Snowflake中的一个独立对象,需要在创建表之前创建,然后在CREATE TABLE语句中引用该对象:CREATE SEQUENCE
本文向大家介绍Android 将数据插入数据库,包括了Android 将数据插入数据库的使用技巧和注意事项,需要的朋友参考一下 示例
问题内容: 我使用Google Maps API制作了一个非常简单的页面,其中有几个字段,用户将在其中放置一些数据。看起来像- http://aiworker2.usask.ca/marker_field_db.html 我要做的是使用javascript / Ajax将数据存储到MySQL数据库中。我发现了几个使用Jquery的示例。我是这个javascript / Ajax / Jquery平
我有一个postgres数据库,包含一个名为“users”的表。该表有四个字段: id BIGSERIAL主键 显示名称文本不为空, 电子邮件文本不为空 电话号码文本 我想从dart代码中添加数据。我的尝试是这样的: 问题是我遇到了一个例外 (PostgreSQLSeverity.error 42601:在“display_name”处或附近出现语法错误)
事情是这样的 我不知道发生了什么,如果有人能帮忙,我会非常感激的。THX!
问题内容: 我想使用PreparedStatement将行插入表中。该表有3列(int,String,String)。关键是int列是AUTO_INCREMENT,所以我想将该变量保留为空,然后让数据库完成该工作(这是一个id)。还没有找到如何做! 这是一个MySQL数据库。 问题答案: 这是相对简单的,只需从列列表中删除自动增量列即可: 准备该语句,设置两个参数,然后在非查询模式下执行。