我正在嘗試使用 Flask 和 SQLAlchemy 連接到 Postgres 資料庫。我遵循了一個 youtube 教程,但它似乎對我不起作用,因為它會引發通常與回圈依賴相關的錯誤。
當我在 Python 控制臺上輸入:from database_functions import db它說:
Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: cannot import name 'db' from 'database_functions' C:\path\to\file\database_functions.py)
這是我正在使用的代碼:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from werkzeug.security import generate_password_hash, check_password_hash
from cryptography.hazmat.primitives import serialization
import psycopg2
import configparser
import jwt
from datetime import datetime
if __name__ == '__main__':
config = configparser.ConfigParser()
config.read('database.ini')
app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = 'postgresql://' config['postgresql']['user'] ':' config['postgresql']['password'] '@' config['postgresql']['host'] ':' config['postgresql']['port'] '/' 'survey_platform'
db = SQLAlchemy(app)
class SurveyData(db.Model):
id = db.Column(db.Integer, primary_key=True)
codigo_do_projeto = db.Column(db.String(250))
我希望在與運行 python 命令的檔案夾相同的檔案夾中創建一個資料庫檔案。
uj5u.com熱心網友回復:
這可能是一個范圍界定問題。在上面粘貼的檔案中,該db變數在模塊級別不可用,因為它是在if塊內定義的。
if __name__ == '__main__':通常在您希望檔案可直接執行但在模塊級別沒有可執行代碼時使用。
例如:
# run.py
print("Hello, World!")
相對
# run2.py
if __name__ == "__main__":
print("Hello, World!")
如果你分別運行python run.py和python run2.py,你會看到相同的結果。但是,如果您創建另一個將其中任何一個作為模塊匯入的檔案,您會看到不同的結果 - 匯入 fromrun2.py不會列印任何內容,但 importingrun.py會。
# another_file.py
import run
# vs
import run2
所以如果你想讓一個檔案像一個模塊一樣使用并且讓其他模塊從它匯入,你想要匯入的物件需要在模塊級別,但你應該記住,模塊級別的任何東西實際上都會在匯入時執行,所以如果你不希望發生這種情況,那么你應該將該代碼包裝成類似的東西if __name__ == '__main__':
為了澄清,通過“模塊級別”,我的意思是沒有在任何范圍誘導塊內定義,所以基本上沒有縮進。如果你洗掉你的if和 unindent 里面的所有東西,你應該能夠from database_functions import db
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/529883.html
上一篇:pythonFlask-Mail中的錯誤,我有KeyErrorMAIL_DEFAULT_SENDER或其他
下一篇:將資料從一個表拆分到另一個表
