我试图用一个简单的 Flask 应用程序来反映已经在我的应用程序外部生成的 sqlite 数据库,但无法使其与我猜的数据库有效连接..
主要问题是我无法访问其中的任何表。
我正在 Github Codespaces 中工作,并且已经尝试过使用 os.path 等设置数据库路径的解决方法。
这就是我的代码的开始方式:
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy.ext.automap import automap_base
from sqlalchemy import create_engine, MetaData
import os.path
db_name = 'evaluaciones.sqlite'
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
db_path = os.path.join(BASE_DIR, db_name)
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + db_name
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
然后,当我试图获取数据并使其工作时,我继续这样做
with app.app_context():
print(db_name)
metadata_obj = MetaData(schema="main")
metadata_obj.reflect(db.engine)
print(metadata_obj.tables)
print(metadata_obj.tables.keys())
终端的输出只有这三行:
evaluaciones.sqlite
FacadeDict({})
dict_keys([])
如果通过终端,我使用sqlite3访问数据库,这就是我看到的:
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> .open evaluaciones.sqlite
sqlite> .tables
formulas ingredientes materias_primas
为什么我看不到与当前 Python 代码的输出相同的列表?
嗯,不太确定如何通过这些“元数据”对象来做到这一点,但是创建从 db.Model 继承的类使其工作。
本教程在这里很好地解释了它并帮助我解决了这个问题。