Python 烧瓶:启动时插入一些测试数据?
当flask第一次启动时,我试图将一些虚拟数据插入数据库。我正在创建我的表,使用 我运行: 烧瓶数据库初始化 烧瓶数据库迁移 烧瓶数据库升级 我检查了迁移脚本,一切看起来都很好 接下来,启动Dbeaver并打开test.db文件,验证是否确实创建了来自模型的表 我甚至在关键字值“test”中插入了insert;在Dbeaver中只是为了验证是否可以插入一些数据 然而,当我通过flask run启动我的应用程序时,我得到一个sqlalchemy.exc.OperationalError:sqlite3.OperationalError没有这样的表:关键字 回溯正在我的create\u应用程序函数中的existing=Keyword.query.filterKeyword.Keyword==k.lower.one\u或\u none上抛出错误 整个create_应用程序功能如下所示:Python 烧瓶:启动时插入一些测试数据?,python,flask,flask-sqlalchemy,Python,Flask,Flask Sqlalchemy,当flask第一次启动时,我试图将一些虚拟数据插入数据库。我正在创建我的表,使用 我运行: 烧瓶数据库初始化 烧瓶数据库迁移 烧瓶数据库升级 我检查了迁移脚本,一切看起来都很好 接下来,启动Dbeaver并打开test.db文件,验证是否确实创建了来自模型的表 我甚至在关键字值“test”中插入了insert;在Dbeaver中只是为了验证是否可以插入一些数据 然而,当我通过flask run启动我的应用程序时,我得到一个sqlalchemy.exc.OperationalError:sqlit
def create_app(config='metadata.settings'):
app = Flask(__name__, instance_relative_config=True)
app.config.from_object(config)
load_extensions(app) # sets db.init_app(app)
@app.before_first_request
def insert_test_data():
test_record = {
"metadata_version": "1.1",
"name": "foo-package",
"version": "0.1",
"platforms": [
"UNKNOWN"
],
"summary": "Hello Foo Package",
"keywords": "foo pandas numpy",
"home_page": "https://gitlab.blah.com/my-examples/model-bar",
"author": "John Smith",
"author_email": "john.smith@gmail.com",
"classifiers": [
"Programming Language :: Python :: 3",
"Operating System :: Microsoft :: Windows :: Windows 10",
"Development Status :: 1 - Planning",
"Topic :: Software Development :: Testing :: Mocking",
"Topic :: Software Development :: Testing"
]
}
def add_record(test_record):
rec = PackageMetadata()
rec.name = test_record['name'],
rec.version = test_record['version'],
rec.desc = test_record['summary'],
rec.home_page = test_record['home_page'],
rec.author = test_record['author'],
rec.author_email = test_record['author_email']
keywords = test_record['keywords'].split(' ')
for keyword in keywords:
keyword_to_add = add_keyword(keyword)
rec.keywords.append(keyword_to_add)
classifiers = test_record['classifiers']
for classifier in classifiers:
classifier_to_add = add_classifier(classifier)
rec.classifiers.append(classifier_to_add)
try:
db.session.add(rec)
db.session.commit()
except Exception as e:
print(e)
def add_keyword(k):
existing = Keyword.query.filter(Keyword.keyword == k.lower()).one_or_none()
if existing is not None:
return existing
else:
new_keyword = Keyword()
new_keyword.keyword = k.lower()
return new_keyword
def add_classifier(k):
existing = Classifier.query.filter(Classifier.classifier == k).one_or_none()
if existing is not None:
return existing
else:
new_classifier = Classifier()
new_classifier.classifier = k
return new_classifier
add_record(test_record)
return app
在DB中创建的表的名称与您在模型文件中使用的名称不同。您需要在架构文件中验证这一点。flask db init正在我的根目录中创建数据库。如果我将db.create_all添加到我的上述函数中,则db是在包文件夹中创建的。我只需要编辑我的配置文件,为SQLALCHEMY\u DATABASE\u URI设置一个更显式的路径。