Я получил ошибку ниже, когда использую Sqlalchemy для вставки данных в хранилище Снежинка, любая идея?
Ошибка :
Не удалосьпереписать многострочную вставку [SQL: 'INSERT INTO виджетов (id, name, type)
SELECT% (id) s AS anon_1,% (name) s AS anon_2, widgets.id \ nFROM виджеты \ nWHEREwidgets.type =% (card_id) s ']
[параметры: ({' id ': 2,' name ':' Lychee ',' card_id ': 1}, {' id ': 3,'name': 'testing', 'card_id': 2})]
код :
from sqlalchemy import *
from snowflake.sqlalchemy import URL
# Helper function for local debugging
def createSQLAlchemyEngine():
url = URL(
account='',
user='',
password='',
database='db',
schema='',
warehouse='',
role='',
proxy_host='',
proxy_port=8099
)
engine = create_engine(url)
return engine
conn = createSQLAlchemyEngine()
# Construct database
metadata = MetaData()
widgetTypes = Table('widgetTypes', metadata,
Column('id', INTEGER(), nullable=True),
Column('type', VARCHAR(), nullable=True))
widgets = Table('widgets', metadata,
Column('id', INTEGER(), nullable=True),
Column('name', VARCHAR(), nullable=True),
Column('type', INTEGER(), nullable=True))
engine = conn
metadata.create_all(engine)
# Connect and populate db for testing
conn = engine.connect()
sel = select([bindparam('id'), bindparam('name'), widgets.c.id]).where(widgets.c.type == bindparam('card_id'))
ins = widgets.insert().from_select(['id', 'name', 'type'], sel)
conn.execute(ins, [
# {'name': 'Melon', 'type_name': 'Squidgy'},
{'id': 2, 'name': 'Lychee', 'card_id' : 1 },
{'id': 3, 'name': 'testing', 'card_id': 2}
])
conn.close()
В основном, что я пытаюсьсделать это, как показано ниже, но Snowflake не поддерживает этот синтаксис.
insert into tableXX
values('Z',
(select max(b) +1 from tableXX a where a.CD = 'I'), 'val1', 'val2')
Итак, я должен сделать что-то подобное, но получил вышеуказанную ошибку.
insert into tableXX
select 'val1', 'val2', ifnull(max(c), 0) + 1 from tableXX where a.CD = 'I',
select 'val1', 'val2', ifnull(max(c), 0) + 1 from tableXX where a.CD = 'I',
Цель:
Логика, стоящая за кодом, заключается в том, что я хочу обновить базу sequence_id по максимуму существующего sequence_id записи, которая имеет тот же самый «CD» с новой записью.