Flask 应用程序无法使用 pd.read_sql 从服务器上的 SQLite 数据库读取数据

问题描述 投票:0回答:1

在我的 Flask 应用程序中,我有一个名为

Well
的模型类,其中包含一个名为
getProdDF
的函数,它从名为
ProductionData
的模型类中提取生产数据,并使用
pd.read_sql
将其转换为 pandas 数据框。在我的本地机器上,它像这样工作得很好:

class Well:
    id = db.Column(db.Integer, primary_key=True)
    production = db.relationship('ProductionData', backref='well', lazy='dynamic')
    
    def getProdDF(self): 
        data = self.production
        df = pd.read_sql(data.statement, data.session.bind)

class ProductionData(ProdData, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    well_id = db.Column(db.Integer, db.ForeignKey('well.id'))
    oil = db.Column(db.Float)
    #etc

但是当我试图将代码移动到服务器并尝试在那里运行它时,它给了我这个错误:

  File "C:\Users\usr\Code\ProjName\app\models.py", line 517, in getProdDF
    df = pd.read_sql(data.statement, data.session.bind)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\usr\Envs\ProjName\Lib\site-packages\pandas\io\sql.py", line 564, in read_sql
    return pandas_sql.read_query(
           ^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\usr\Envs\ProjName\Lib\site-packages\pandas\io\sql.py", line 2078, in read_query
    cursor = self.execute(*args)
             ^^^^^^^^^^^^^^^^^^^
  File "C:\Users\usr\Envs\ProjName\Lib\site-packages\pandas\io\sql.py", line 2016, in execute
    cur = self.con.cursor()
          ^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'cursor'

有人知道我做错了什么吗?数据库文件(

app.db
)被复制过来,我可以连接到数据库并在命令行中从中获取数据,但是当我尝试运行
Well
模型的
getProdDF
函数时,我得到了同样的错误:

>>> from app import app, db
>>> from app.models import Well
>>> app.app_context().push()
>>> w = Well.query.first()
>>> w.getProdDF()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\usr\Code\ProjName\app\models.py", line 517, in getProdDF
    df = pd.read_sql(data.statement, data.session.bind)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\usr\Envs\ProjName\Lib\site-packages\pandas\io\sql.py", line 564, in read_sql
    return pandas_sql.read_query(
           ^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\usr\Envs\ProjNameemphasized text\Lib\site-packages\pandas\io\sql.py", line 2078, in read_query
    cursor = self.execute(*args)
             ^^^^^^^^^^^^^^^^^^^
  File "C:\Users\usr\Envs\ProjName\Lib\site-packages\pandas\io\sql.py", line 2016, in execute
    cur = self.con.cursor()
          ^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'cursor'

非常感谢, 亚历克斯

python pandas sqlalchemy
1个回答
0
投票

折腾了一番,终于找到了问题所在。在我的本地机器上,我安装了 SQLAlchemy==1.4.29 和 Flask-SQLAlchemy==2.5.1,而在服务器上,我安装了 SQLAlchemy==1.4.46 和 Flask-SQLAlchemy==3.0.3。无论出于何种原因,这些软件包的新版本在我的网站上不起作用。

为了修复它,我首先在服务器上卸载了新版本:

>>> pip uninstall SQLAlchemy
>>> pip uninstall Flask-SQLAlchemy

然后通过在 pip 中指定版本来安装旧版本,如下所示:

>>> pip install SQLAlchemy==1.4.29
>>> pip install Flask-SQLAlchemy==2.5.1

这就解决了。

谢谢, 亚历克斯

© www.soinside.com 2019 - 2024. All rights reserved.