Open alex-linx opened 1 year ago
same issue with array, object types as well. looks like an old one and no one at Snowflake cares enough to fix this. see #299 there are some odd solutions there which might be helpful.
Bump. I was about to create almost identical issue. There is some workaround from the issue #299 mentioned already and Snowflake Knowledge Base.
However I would expect same as @alex-linx that using Python dict
or json.dumps(my_dict)
would work correctly with OBJECT, VARIANT
datatypes.
Maybe we can expect proper support when snowflake-sqlalchemy
switches to SQLAlchemy 2.0? #452
hi and thank you for submitting this issue and for all your patience here. Tried to make this work but it does not seem to be a way to pass the dict as a VARIANT
upon initial table creation.
We'll consider this request as a future enhancement but as always, if there's a possibility for submitting a PR, that would be greatly appreciated and speed things up.
For now, the workarounds already mentioned can be used (e.g. create the table then populate it with the VARIANT data afterwards as described in above KB article)
Bumping this. It's been year since https://github.com/snowflakedb/snowflake-sqlalchemy/issues/299 was logged and we still can't do basic things with arrays. Sad to see the level of neglect on this repo.
Please answer these questions before submitting your issue. Thanks!
What version of Python are you using?
3.9
What operating system and processor architecture are you using?
macOS-13.3.1-arm64-arm-64bit
What are the component versions in the environment (
pip freeze
)?Replace with the output of
python -m pip freeze
What did you do?
When I run
sess.commit()
I get an errorI also tried with
my_item = MyTable(json_data=json.dumps(my_dict))
, then I get a different errorI also tried converting the dictionary to a string and wrapping it with "PARSE_JSON()". None of it worked.
What did you expect to see?
I expect to be able to run
And the dictionary to be written to snowflake as a json object with VARIANT type.
Is there any way to do that?