当使用pandas read_sql
使用SQLAlchemy查询我的数据库时,我收到以下警告:
SAWarning:专栏' id'在表上被Column替换(' id',Integer(),table =,primary_key = True,nullable = False),它具有相同的密钥。考虑use_labels用于select()语句。 (key,getattr(现有,'表',无),值))
是的,因此我的League
,Season
,Round
,Match
和Team
每个表都有一个名为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。
答案 0 :(得分:0)
使用以下查询方法:
query.with_labels()
这将在每列上添加唯一的名称,并且不会产生歧义。