gpt4 book ai didi

python - 将数据从 sqlalchemy 移动到 pandas DataFrame

转载 作者:太空宇宙 更新时间:2023-11-03 12:30:36 27 4
gpt4 key购买 nike

我正在尝试在 pandas DataFrame 中加载 SQLAlchemy。

当我这样做时:

df = pd.DataFrame(LPRRank.query.all())

我明白了

>>> df
0 <M. Misty || 1 || 18>
1 <P. Patch || 2 || 18>
...
...

但是,我想要的是数据库中的每一列都是数据框中的一列:

0        M. Misty  1  18
1 P. Patch 2 18
...
...

当我尝试时:

dff = pd.read_sql_query(LPRRank.query.all(), db.session())

我得到一个属性错误:

AttributeError: 'SignallingSession' object has no attribute 'cursor'

dff = pd.read_sql_query(LPRRank.query.all(), db.session)

也报错:

AttributeError: 'scoped_session' object has no attribute 'cursor'

我用来生成对象列表的是:

app = Flask(__name__)
db = SQLAlchemy(app)

class LPRRank(db.Model):
id = db.Column(db.Integer, primary_key=True)
candid = db.Column(db.String(40), index=True, unique=False)
rank = db.Column(db.Integer, index=True, unique=False)
user_id = db.Column(db.Integer, db.ForeignKey('lprvote.id'))

def __repr__(self):
return '<{} || {} || {}>'.format(self.candid,
self.rank, self.user_id)

这个问题: How to convert SQL Query result to PANDAS Data Structure?没有错误,但将每一行作为一个对象,这不是我想要的。我可以访问返回对象中的各个列,但似乎有更好的方法。

如果您已经了解正在发生的事情并且只需要复习语法,那么 pandas.pydata.org 上的文档非常有用。 2016 年 4 月 20 日的文档(1319 页 pdf)将 pandas 连接标识为 p.872 上仍处于试验阶段。

现在,SQLALCHEMY/PANDAS - SQLAlchemy reading column as CLOB for Pandas to_sql是关于指定 SQL 类型的。我的是默认的 SQLAlchemy。

并且,sqlalchemy pandas to_sql OperationalError , Writing to MySQL database with pandas using SQLAlchemy, to_sql , 和 SQLAlchemy/pandas to_sql for SQLServer -- CREATE TABLE in master db关于写入产生操作错误、数据库错误和“创建表”错误的 SQL 数据库,这些都不是我的问题。

这个,SQLAlchemy Pandas read_sql from jsonb想要列的 jsonb 属性:不是我的茶。

上一个问题 SQLAlchemy ORM conversion to pandas DataFrame解决了我的问题,但解决方案:使用 query.session.bind 不是我的解决方案。我正在使用 db.session.add() 和 db.session.commit() 打开/关闭 session ,但是当我按照此处第二个答案中指定的方式使用 db.session.bind 时,然后我得到一个属性错误:

AttributeError: 'list' object has no attribute '_execute_on_connection'

最佳答案

只需在您的模型中添加一个 __init__ 方法,并在数据帧构建之前调用 Class 对象。具体如下,使用 pandas.DataFrame() 创建一个可迭代的元组绑定(bind)到列中。

class LPRRank(db.Model):
id = db.Column(db.Integer, primary_key=True)
candid = db.Column(db.String(40), index=True, unique=False)
rank = db.Column(db.Integer, index=True, unique=False)
user_id = db.Column(db.Integer, db.ForeignKey('lprvote.id'))

def __init__(self, candid=None, rank=None, user_id=None):
self.data = (candid, rank, user_id)

def __repr__(self):
return (self.candid, self.rank, self.user_id)

data = db.session.query(LPRRank).all()
df = pd.DataFrame([(d.candid, d.rank, d.user_id) for d in data],
columns=['candid', 'rank', 'user_id'])

或者,使用基于您定义的模型类的 SQLAlchemy ORM,LPRRank,运行 read_sql:

df = pd.read_sql(sql = db.session.query(LPRRank)\
.with_entities(LPRRank.candid,
LPRRank.rank,
LPRRank.user_id).statement,
con = db.session.bind)

关于python - 将数据从 sqlalchemy 移动到 pandas DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49215096/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com