当前位置: 首页 > 知识库问答 >
问题:

将数据从sqlalchemy移动到pandas DataFrame

高明辉
2023-03-14

我正试着在一个熊猫数据目录中加载一个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) 

上一个问题SQLAlchemy ORM到pandas DataFrame的转换解决了我的问题,但是解决方案:使用query.session.bind不是我的解决方案。我使用db.session.add()和db.session.commit()打开/关闭会话,但是当我使用db.session.bind时,就会得到一个属性错误:

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

共有1个答案

黄隐水
2023-03-14

只需在模型中添加__init__方法,并在构建dataframe之前调用Class对象。具体地说,下面创建一个元组的迭代绑定到使用pandas.dataframe()的列中。

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'])

或者,使用基于定义的模型类LPRRank的SQLAlchemy ORM来运行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)
 类似资料:
  • move key db-index 返回1成功。0 如果key不存在,或者已经在指定数据库中

  • 我在Java中有以下: 我想将它的数据移动到: 有可能那样做吗?

  • 问题内容: 将Solr核心迁移到elasticsearch索引的最佳方法是什么? 不推荐使用solr-river-plugin(https://github.com/javanna/elasticsearch-river- solr )。 问题答案: OpenSource Connections中有一个不错的,由爱心人士精心制作的自定义Python工具,您可以用来执行以下操作: https://g

  • 问题内容: 我有一个现有的PHP / MySQL应用程序,我正尝试将其迁移到AngularJS / Firebase,以作为学习这些较新技术的一种方式。 该应用程序在MySQL中具有自己的表架构。一个这样的表如下所示: 我的问题是:如何将这个表结构及其中的数据从MySQL迁移到Firebase? 我尝试通过查询将数据导出到JSON字符串中,例如: 这给出了有效的JSON字符串,例如: 我将其保存在

  • 我需要避免在Post操作中将注释作为请求参数发送。为此,我需要将其从url移动到正文,但我不知道如何操作。 代码如下:

  • 我有一个index.blade.php文件(网站首页)用户可以填写一些细节(姓名和电子邮件)和我想做的是传递数据到register.blade.php文件和填充的形式与以前的输入。我在这里读了很多关于old()函数的帖子,但是我不能让它准确地工作。 指数刀身php register.blade.php是使用php artisan make: auth命令生成的默认文件,没有任何变化