# 前後端串接前 DB query 處理 想藉由flask SqlAlchemy查詢並將tabla轉json格式輸出 嘗試以ORM方式取得column name 再將 row 中的 value一起組成dict ```=python data = PaymentInfo.query.limit(3).all() #取得column name my_query = PaymentInfo.__table__.columns schema_name = [column.key for column in PaymentInfo.__table__.columns] my_list = [] for row in data: my_list.append([dict(zip(schema_name, row))]) print(my_list) ``` #### TypeError: 'PaymentInfo' object is not iterable 解法 ```=python from sqlalchemy.ext.declarative import DeclarativeMeta class AlchemyEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj.__class__, DeclarativeMeta): # an SQLAlchemy class fields = {} for field in [x for x in dir(obj) if not x.startswith('_') and x != 'metadata']: data = obj.__getattribute__(field) try: json.dumps(data) # this will fail on non-encodable values, like other classes fields[field] = data except TypeError: fields[field] = None # a json-encodable dict return fields return json.JSONEncoder.default(self, obj) ``` ## 理解套件 sqlalchemy.ext.declarative 使用 解決問題原理與過程 * * ## reference https://stackoverflow.com/questions/1958219/how-to-convert-sqlalchemy-row-object-to-a-python-dict https://stackoverflow.com/questions/5022066/how-to-serialize-sqlalchemy-result-to-json https://stackoverflow.com/questions/15175339/sqlalchemy-what-is-declarative-base https://medium.com/@alanhamlett/part-1-sqlalchemy-models-to-json-de398bc2ef47 https://mmas.github.io/sqlalchemy-serialize-json