Ожидается VARIANT, но есть VARCHAR для столбца

Я пытаюсь вставить строку JSON в таблицу снежинок, определенную ниже:

from snowflake.sqlalchemy import VARIANT

class Identify(Base):
    __tablename__ = 'identify'

    event_id = Column(Integer, Sequence('event_id_seq'), unique=True, primary_key=True)
    user_id = Column(String, nullable=False)
    traits = Column(VARIANT, nullable=False)

json_str, который я пытаюсь вставить:

json_str = '''
{
    "address": "xyz",
    "age": 32,
    "avatar": "xyz",
    "birthday": {
      "seconds": 20,
      "nanos": 10
     }
}
'''

Я использую следующий код, чтобы вставить json_str в таблицу

session = Session()
obj = Identify(user_id=request.user_id,
               traits=json_str)
session.add(obj)
session.commit()
session.close()

Это дает следующую ошибку: snowflake.connector.errors.ProgrammingError) 002023 (22000): SQL compilation error: Expression type does not match column data type, expecting VARIANT but got VARCHAR(3038) for column TRAITS

Есть ли способ вставить json_str или dict без написания инструкции вставки SQL, использующей функцию преобразования TO_VARIANT?


person galen211    schedule 06.10.2019    source источник


Ответы (2)


В документе API говорится, что VARIANT поддерживается для выборки данных путем преобразования в строку. Я не нашел другого способа хранить данные, кроме INSERT преобразования STRING в VARIANT.

person Hans Henrik Eriksen    schedule 07.10.2019
comment
Спасибо, я заметил язык в документации API и подумал, что странно, что нет метода ORM. - person galen211; 08.10.2019

Это действительный JSON? Мне кажется, у вас есть непревзойденные скобки ...

-Павел-

person PaulHoran    schedule 07.10.2019
comment
Спасибо - обновили брекетинг в вопросе. Была проблема с копированием и вставкой. - person galen211; 07.10.2019