我試圖計算資料庫中的專案數。使用第二個資料庫進行計數按計劃作業,但第一個資料庫給了我這個錯誤
KeyError: <weakref at 0x000001E85C863330; to "Flask" at 0x000001E8397750D0>
該程式非常簡化,但洗掉的元素作業正常(Get、Post、Delete 方法...)
所以我有 3 個檔案
server1:
app = Flask(__name__)
api = Api(app)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///emp.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
class Value(db.Model):
id = db.Column(db.Integer, primary_key=True)
value = db.Column(db.Integer, nullable=False)
class GetCount(Resource):
@staticmethod
def count():
count = Value.query.count()
return count
服務器2:
app2 = Flask(__name__)
api2 = Api(app2)
app2.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///emp2.db'
app2.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db2 = SQLAlchemy(app2)
class Value2(db2.Model):
id = db2.Column(db2.Integer, primary_key=True)
value = db2.Column(db2.Integer, nullable=False)
class GetCount2(Resource):
@staticmethod
def count():
count = Value2.query.count()
return count
主節點:
import time
from server1 import app, Value
from server2 import app2, Value2
app.app_context().push()
app2.app_context().push()
while True:
c = Value.query.count()
c2 = Value2.query.count()
print(c, c2)
time.sleep(1)
我試圖啟動這個程式,但出現了上述錯誤。但是當我
c = Value.query.count()
從masternode檔案中洗掉時,我得到了預期的結果(1 1 1 1 等等)
所以我真的不明白為什么一個程式有效而另一個程式無效,因為它們實際上是一樣的
完整的錯誤回溯:
Traceback (most recent call last):
File "C:\Users\Sergio\Desktop\Домашка\FlaskTest\masternode.py", line 15, in <module>
c1 = Value.query.count()
^^^^^^^^^^^^^^^^^^^
File "C:\Users\Sergio\AppData\Local\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\query.py", line 3175, in count
return self._from_self(col).enable_eagerloads(False).scalar()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Sergio\AppData\Local\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\query.py", line 2892, in scalar
ret = self.one()
^^^^^^^^^^
File "C:\Users\Sergio\AppData\Local\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\query.py", line 2869, in one
return self._iter().one()
^^^^^^^^^^^^
File "C:\Users\Sergio\AppData\Local\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\query.py", line 2915, in _iter
result = self.session.execute(
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Sergio\AppData\Local\Programs\Python\Python311\Lib\site-packages\sqlalchemy\orm\session.py", line 1702, in execute
bind = self.get_bind(**bind_arguments)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Sergio\AppData\Local\Programs\Python\Python311\Lib\site-packages\flask_sqlalchemy\session.py", line 61, in get_bind
engines = self._db.engines
^^^^^^^^^^^^^^^^
File "C:\Users\Sergio\AppData\Local\Programs\Python\Python311\Lib\site-packages\flask_sqlalchemy\extension.py", line 629, in engines
return self._app_engines[app]
~~~~~~~~~~~~~~~~~^^^^^
File "C:\Users\Sergio\AppData\Local\Programs\Python\Python311\Lib\weakref.py", line 415, in __getitem__
return self.data[ref(key)]
~~~~~~~~~^^^^^^^^^^
KeyError: <weakref at 0x000001E85C863330; to 'Flask' at 0x000001E8397750D0>
uj5u.com熱心網友回復:
Flask 使用應用程式背景關系來確定當前應用程式,因此對不同應用程式的查詢應該在各自的背景關系中運行。
這樣的事情應該有效:
while True:
with app.app_context():
c = Value.query.count()
with app2.app_context:
c2 = Value2.query.count()
print(c, c2)
time.sleep(1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/537537.html
下一篇:使用增量重命名資料框的列名
