Thank you for your answer. I'm using MySQL 8 with pymysql.
The `data` column has JSON type, and it seems that MySQL is actually reordering keys. Le mercredi 6 janvier 2021 à 15:31:49 UTC+2, Mike Bayer a écrit : > perhaps Python's json encoder does not maintain ordering? I don't know > either. Can you set echo='debug' on your create_engine() and examine the > parameters being passed as well as the data being returned? also I'm not > seeing which database backend or driver you're using which may be > significant (particularly if its PostgreSQL which has a fully native JSON > datatype). > > > On Wed, Jan 6, 2021, at 7:39 AM, [email protected] wrote: > > Hi, > > I have a problem with a custom JSON type, which is not preserving keys > order, despite that I'm using python 3.8. > > Here is the type definition and usage: > > ``` > import json > from sqlalchemy import Column, Integer > from sqlalchemy.types import TypeDecorator, TEXT > from sqlalchemy.ext.mutable import MutableDict > > class JSONType(TypeDecorator): > impl = TEXT > > def process_bind_param(self, value, dialect): > if value is not None: > value = json.dumps(value) > return value > > def process_result_value(self, value, dialect): > if value is not None: > value = json.loads(value) > return value > > JSONDict = MutableDict.as_mutable(JSONType) > > Base = automap_base() > > class Picture(Base): > __tablename__ = 'picture' > id = Column(Integer, primary_key=True) > data = Column(JSONDict) > ``` > > When I'm storing values in the data field (values are nested elements of > different types), store the picture in database and reload it, the keys > order of data dict is not preserved. I'm don't understand why, because the > version of python I'm using is supposed to keep the dict insertion order. > > Have you some idea how to solve that ? The JSON keys order is important > for my application. > > Thank you > > > -- > SQLAlchemy - > The Python SQL Toolkit and Object Relational Mapper > > http://www.sqlalchemy.org/ > > To post example code, please provide an MCVE: Minimal, Complete, and > Verifiable Example. See http://stackoverflow.com/help/mcve for a full > description. > --- > You received this message because you are subscribed to the Google Groups > "sqlalchemy" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/sqlalchemy/2023e849-37d4-43e5-bd1f-02829474c62bn%40googlegroups.com > > <https://groups.google.com/d/msgid/sqlalchemy/2023e849-37d4-43e5-bd1f-02829474c62bn%40googlegroups.com?utm_medium=email&utm_source=footer> > . > > > -- SQLAlchemy - The Python SQL Toolkit and Object Relational Mapper http://www.sqlalchemy.org/ To post example code, please provide an MCVE: Minimal, Complete, and Verifiable Example. See http://stackoverflow.com/help/mcve for a full description. --- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/sqlalchemy/88cc9e20-834d-4df3-9879-7ceb213f0449n%40googlegroups.com.
