Я выполняю запрос простой группы и суммы для SQL Таблицы серверов на основе Azure. Однако происходит сбой со следующей ошибкой SQL: «В списке выбора можно указать только одно выражение, если подзапрос не введен с EXISTS», когда вызывается метод pandas read_ sql
I Я ошеломлен, так как этот код работал без проблем в августе 2019 года, но сейчас не работает. С другими, даже более простыми запросами, я смог обойти это, создав сеанс ORM и используя синтаксис, приведенный ниже:
records = sess.query(example_table).filter(example_table.c.Load_ID == source_item_id).all()
df = pd.DataFrame(records)
Код, который я использую, ниже
engine = sqlalchemy.create_engine('connectionstringhere')
conn = engine.connect()
metadata = MetaData()
usagedata = Table(table_name,
metadata,
#handle the oddly named columns
Column("financial_year_key",Integer,key = "financial_year_key")
,Column("A",Float,key = "A")
,Column("B",Float,key = "B)
,Column("C",Float,key = "C")
,autoload=True, autoload_with=engine, schema=schema_name
)
#get raw table data, filtered by source_item_id
query = select([usagedata.c.financial_year_key
,usagedata.c.year_and_quarter
,func.sum(usagedata.c.A).label("A")
,func.sum(usagedata.c.B).label("B")
,func.sum(usagedata.c.C).label("C")
,func.sum(usagedata.c.D).label("D") ]
)
query = query.where(usagedata.c.E != source_item_id)
query = query.where(usagedata.c.F.in_(('approved', 'published')) )
query = query.where(usagedata.c.G >= '2002-03 Quarter 1')
query = query.group_by(usagedata.c.H,usagedata.c.I)
query = query.order_by(usagedata.c.H.asc())
df_plain = pd.read_sql(query, conn)
Мне любопытно узнать, в чем разница между этими двумя подходами и почему один работает, а другой нет.