- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我可以使用以下命令运行 flask 测试 python -m unittest discover -p testing.py
但是当我尝试运行 python app.py runserver
它向我显示以下错误消息:
Traceback (most recent call last):
File "app.py", line 10, in <module>
from models import db
File "/home/paula/projects/envioclicktest/restaurant_flask/models.py", line 1, in <module>
from app import app as app
File "/home/paula/projects/envioclicktest/restaurant_flask/app.py", line 10, in <module>
from models import db
ImportError: cannot import name 'db' from partially initialized module 'models'
(most likely due to a circular import) (/home/paula/projects/envioclicktest/restaurant_flask/models.py)
我的项目结构如下:
-restaurant_flask
|-app.py
|-models.py
|-testing.py
这是我的文件的内容以及我认为在每个文件中造成问题的行
from flask import Flask
from flask_script import Manager, Shell
from flask_migrate import Migrate, MigrateCommand
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///restaurant.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
from models import db
migrate = Migrate(app, db)
manager = Manager(app)
manager.add_command('db', MigrateCommand)
if __name__ == '__main__':
manager.run()
from app import app as app <-------Trouble line Originally "from __main__ import app" but that doesnt work with testing.py
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy.sql.functions import func
from sqlalchemy.exc import IntegrityError
import datetime
import pytz
import random
mx = pytz.timezone('America/Mexico_City')
db = SQLAlchemy(app)
class Waiter(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(128))
services = db.relationship("Service", back_populates="waiter")
class Table(db.Model):
id = db.Column(db.Integer, primary_key=True)
table_no = db.Column(db.String(128))
services = db.relationship("Service", back_populates="table")
class Service(db.Model):
def __init__(self, tip):
time = datetime.datetime.now(mx)
self.tip = tip
# check for waiters
waiters = db.session.query(Waiter, func.count(Service.id).\
filter(Service.exit>time)).\
outerjoin(Service).group_by(Waiter).all()
print(waiters)
available_waiters= [i for i in waiters if i[1] < 4]
available_waiters_length = len(available_waiters)
# Check for tables
tables = db.session.query(Table, func.count(Table.id).\
filter(Service.exit>time)).\
outerjoin(Service).group_by(Table).all()
print(tables)
available_tables= [i for i in tables if i[1] < 1]
available_tables_length = len(available_tables)
#check if available
if available_tables_length == 0 and available_waiters_length == 0:
raise Exception("not enough waiters or tables")
if available_waiters_length == 0:
raise Exception("not enough waiters")
if available_tables_length == 0:
raise Exception("not enough tables")
# add waiter and table
waiter_obj = random.choice(available_waiters)
self.waiter_id = waiter_obj[0].id
table_obj = random.choice(available_tables)
self.table_id = table_obj[0].id
# check if current time is open
if time.time() < datetime.time(9,0) or time.time()> datetime.time(23, 30):
raise Exception("The restaurant is closed")
# add timedelta to init_time
if time.time() < datetime.time(17,0):
self.exit = time + datetime.timedelta(minutes=90)
if time.time() > datetime.time(17,0):
self.exit = time + datetime.timedelta(minutes=120)
id = db.Column(db.Integer, primary_key=True)
table_id = db.Column(db.Integer, db.ForeignKey('table.id'))
table = db.relationship("Table", back_populates="services")
waiter_id = db.Column(db.Integer, db.ForeignKey('waiter.id'))
waiter = db.relationship("Waiter", back_populates="services")
arrival = db.Column(db.DateTime, default=datetime.datetime.now(mx))
exit = db.Column(db.DateTime)
tip = db.Column(db.Numeric(10,2))
from app import app as app <------- This line does not work as "from __main__ import app"
import unittest
from models import db, Waiter, Table, Service
from freezegun import freeze_time
import datetime
import pytz
class UserTest(unittest.TestCase):
def setUp(self):
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
app.config['TESTING'] = True
app.config['WTF_CSRF_ENABLED'] = False
self.app = app.test_client()
db.create_all()
def tearDown(self):
db.session.remove()
db.drop_all()
dt = datetime.datetime(2018,1,1,11,0,0,tzinfo=pytz.timezone('America/Mexico_City'))
@freeze_time(dt)
def test_models(self):
#Create a Table and a Waiter
table = Table(table_no="table1")
db.session.add(table)
waiter = Waiter(name="Juan")
db.session.add(waiter)
db.session.commit()
service = Service(tip=90.80)
db.session.add(service)
db.session.commit()
query = Service.query.all()
#Check that all users exist
assert len(query) == 1
assert query[0].table_id == 1
assert query[0].waiter_id == 1
assert ((query[0].exit-query[0].arrival).seconds/60) >= 90
我想不通,快把我逼疯了。
非常感谢任何帮助:)
最佳答案
对于解决方案,简单的做法是:
在模型上
db = SQLAlchemy() #Remove the app here
在应用程序上
from models import db
db.init_app(app) #Add this line Before migrate line
migrate = Migrate(app, db)
关于python - 无法从部分初始化的模块 'db' 导入名称 'models'(很可能是由于循环导入),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66251612/
这很可能是我的语法错误,因为我对在 C++ 中使用多个文件和结构(特别是将结构传递给函数)还很陌生。这是三个文件: 主要.cpp: #include #include #include #inc
我有 TypeScript NestJS 项目。 我需要验证传入的 DTO 到我的 API。它可以被描述为“创建项目”,其中我们有建筑类型(房屋、公寓、花园),并根据该类型我们需要定义: 房屋:楼层包
是否可以从可用于泛型参数的可能类型集中排除特定类型?如果是如何。 例如 Foo() : where T != bool 将意味着除了类型 bool 之外的任何类型。 编辑 为什么? 以下代码是我尝试强
我的 WebGL 体积光线转换应用程序即将完成。但是我发现了一个问题。我必须通过 2D 纹理模拟 3D 纹理。这不是问题。我正在用小切片创建一个巨大的纹理。巨大纹理的尺寸约为 4096x4096 像素
我正在处理的网页上显示了一个返回顶部按钮。当您向下滚动时,有时单击它时,它会跳到顶部,然后跳回您在页面上的位置,然后像预期的那样平滑滚动到顶部。请记住,它并不总是这样做。这只是一个滞后或故障问题还是我
我对此还很陌生,所以请耐心等待。 我有一个类,它具有三个属性:几个整数和一个用户定义对象的集合。 public class Response { public int num1 { get;
我正在制作一款平台游戏,让玩家每 30 毫秒跳跃一次,并向上添加少量的力。我想我应该使用多线程,因为我之前已经做过一些,而且看起来很简单。无论如何,我尝试了这个: public void jump()
是否可以从可能的类型集中排除特定类型,这些类型可以在泛型参数中使用?如果是这样的话。 例如 Foo() : where T != bool 表示除 bool 类型之外的任何类型。 编辑 为什么? 以下
我正在尝试在单个查询中实现内部和外部联接,我不确定我的做法是正确还是错误,因为我不太擅长查询。 就这样吧。 我有以下表格。 hrs_residentials hrs_residential_utili
关于 my website ,有一段代码可以向页面添加几个元素。这段代码不是我可以编辑的东西,而且我对它放置这些元素的位置不满意,因为它弄乱了我的一些布局。所以我想出了一个小的 jQuery 来将它们
一位客户希望我创建一个数据集,如下所示。我不知道这是否可能或合乎逻辑。 我有表parent: id name ------- ------- 1 parent1 2
这可能吗?google 好像没有这方面的资料.. 这样,如果用户在另一个网站上播放视频或歌曲,我的音量就会自动减小 最佳答案 不,这是不可能的。 如果可能的话,它必须是特定于浏览器的,但我不认为这种情
所以我正在尝试制作响应式页面。问题是为什么它归结为移动数据需要位于列表中。 我会用一些示例代码来解释 所以这可能是桌面上的输出 option1
当您将鼠标悬停在a 元素 上时,是否可以删除url? 这就是我的意思: 最佳答案 一种选择是使用一些 JavaScript。 删除 href=来自 的属性标签,取而代之的是 onclick=...
我已经考虑了几个小时,但我无法取得太大进展。它是这样的: You have an array of size n and q queries. Each query is of the form (l
我一直在尝试编写一个脚本来强化 android。我没有成功! 我正在通过模拟器运行一个 AVD,并且已经用我加载的 android shell 和 bash shell 试过了。正如您将在下面看到的那
Private Sub Workbook_Open() Dim WBname As String WBname = ThisWorkbook.name If Not InStr(WBname, "te
Spark 2.0.0-预览版 我们有一个应用程序使用了相当大的广播变量。我们在大型 EC2 实例上运行它,因此部署处于客户端模式。广播变量是一个巨大的 Map[String, Array[Strin
我正在尝试从此link中提取摘要。但是,我无法仅提取摘要的内容。到目前为止,这是我完成的工作: url <- "http://www.scielo.br/scielo.php?script=sci_a
我的主页中有一个iframe。 iframe页面中有一个modalpopup。因此,当显示modalpopup时,modalpopup的父级是iframe主体和主页父级主体。因此,覆盖层仅覆盖ifra
我是一名优秀的程序员,十分优秀!