gpt4 book ai didi

python - flask + SQLAlchemy : Load database with records by running python script

转载 作者:太空狗 更新时间:2023-10-30 02:52:53 24 4
gpt4 key购买 nike

我正在尝试在 Flask 应用程序中使用 SQLALchemy ONCE 加载我的数据库。我以为我可以通过从终端命令运行脚本来将记录添加到数据库中,但似乎我在执行 python 脚本时遇到了困难?

  • 通过运行 export FLASK_APP=app/__init__.py 然后 flask run 初始化应用程序是否甚至加载数据库?
  • 是否每次重新启动本地服务器

文件夹结构:

  app
api
__init__.py
log.py
tasks
__init__.py
test.py
__init__.py
models.py
utils.py

app/api/log.py

from app import app
from app.models import Race, db
from app.utils import *

def historical_records():
df_races, df_circuits, constructors, df_drivers, df_results = extract_to_df_race('results', seasons, races_round)
# Check if row exists in table
exists = db.session.query(db.exists().scalar())
if exists is None:
df_races, df_circuits, constructors, df_drivers, df_results = extract_to_df_race('results', seasons, races_round)
save_races_to_db(df_races, db)
else:
print("The database already contains data of 2016 to current race")

def save_races_to_db(df_races, db):
for idx,row in df_races.iterrows():
r = Race()
r.url = df_races.loc[idx,"url"]
r.season = df_races.loc[idx,"season"]
r.raceName = df_races.loc[idx,"raceName"]
db.session.add(r)
try:
db.session.commit()
except Exception as e:
db.session.rollback()
print(str(e))


historical_records()

我激活了虚拟环境,然后执行了python app/api/log.py但是遇到了这个错误:

  File "app/api/log.py", line 1, in <module>
from app import app
ImportError: No module named app

是否通过运行 export FLASK_APP=app/__init__.py 然后 flask run 来初始化应用甚至加载数据库?

最佳答案

您的问题是您将包内的模块用作脚本;此时,顶级模块导入路径设置为 app/api/ 目录。至少你会以 python -m app.api.log 的形式运行它以保持正确的上下文。

但是,您应该改为将脚本设为 Flask command ,因为这为您提供了一个事件的应用程序上下文

让你的historical_records()函数成为命令:

import click

from app import app
from app.models import Race, db
from app.utils import *

@app.cli.command()
def historical_records():
# your function

从模块末尾删除 historical_records() 调用。

然后你可以运行命令

FLASK_APP=app flask historical_records

(你不需要添加/__init__.pyFLASK_APP)

我们无法告诉您 flask run 是否会加载数据库,因为我们看不到 __init__.pydb.py,我也不知道您是否运行了 create_all() 函数。

关于python - flask + SQLAlchemy : Load database with records by running python script,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51789475/

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