SQLAlchemy& pandas:如何查询具有不同标签的列?

时间:2016-12-31 20:50:19

标签: python pandas sqlalchemy

当使用pandas read_sql使用SQLAlchemy查询我的数据库时,我收到以下警告:

  

SAWarning:专栏' id'在表上被Column替换(' id',Integer(),table =,primary_key = True,nullable = False),它具有相同的密钥。考虑use_labels用于select()语句。         (key,getattr(现有,'表',无),值))

是的,因此我的LeagueSeasonRoundMatchTeam每个表都有一个名为id的列。当然。

我一开始忽略了这一点,但是当我想使用id标签/名称删除其中一个列时,我会在臀部咬我。甚至通过索引(!)引用列的pd.drop()重命名了所有具有相同名称的列:

pd.rename

SQLAlchemy建议我将select_labels用于select()语句,虽然我设法使用常规查询,但我无法确定在以下查询中将pandoc.rename( columns={pandoc.columns[1]: 'match_id'}, inplace=True) # This replaced all columns with the label `id` to `match_id` 放在哪里:< / p>

.label('new_column_name')

一种选择是将表格中的所有pandoc = pd.read_sql( Match.query.options( joinedload(Match.home_team), joinedload(Match.away_team)).statement, db.session.bind, parse_dates=['date_time']) 列更改为id,但对于应该有一个相当简单的解决方案的问题,这似乎是一个丑陋的解决方法。

tablename_id的示例输出:

print(pandoc.head())

请注意3 total_goals id round_id \ 0 1.0 somestring here s12786-0 1 0.0 somestring here s12786-0 2 5.0 somestring here s12786-0 3 3.0 somestring here s12786-0 4 0.0 somestring here s12786-0 home_team_id away_team_id id id 0 667 664 667 664 1 669 691 669 691 2 672 677 672 677 3 707 686 707 686 4 699 703 699 703 列,其中一列是匹配ID,另外两列是主队ID和客队ID。

1 个答案:

答案 0 :(得分:0)

使用以下查询方法:

query.with_labels()

这将在每列上添加唯一的名称,并且不会产生歧义。