как отличить столбец json от RowProxy в SQLAlchemy?

#python #sqlalchemy #pymysql

#python #sqlalchemy #pymysql

Вопрос:

Например, когда я выполняю следующий код, результирующий тип данных str :

 result = engine.execute('''
  SELECT CAST('{"foo": "bar"}' as JSON) as `json`
''')
row = result.fetchone()
json = row[0]
type(json)
  

Значение столбца json, имеющее тип str , не очень удобно для метапрограммирования.

Вопрос

Есть ли какой-либо способ извлечь информацию из result (или экземпляра ResultProxy ), какой тип был у каждого столбца?

env

  • MySQL: 8.0.11
  • SQLAlchemy: 1.3.0
  • pymysql: 0.9.3

Ответ №1:

Вы можете, по крайней мере, достичь этого, явно сообщив SQLAlchemy, что результатом является JSON:

 from sqlalchemy.types import JSON

stmt = text('''SELECT CAST('{"foo": "bar"}' as JSON) as `json`''')
stmt = stmt.columns(json=JSON)

row = engine.execute(stmt).fetchone()
type(row.json)