当我运行代码时,出现以下错误:
File "c:\Python\app.py", line 3, in <module>
from user import db, Hasta # import relevant classes and database from user.py
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "c:\Python\user.py", line 6, in <module>
from app import app # Import Flask app
^^^^^^^^^^^^^^^^^^^
File "c:\Python\app.py", line 3, in <module>
from user import db, Hasta # Import relevant classes and database from user.py
^^^^^^^^^^^^^^^^^^^^^^^^^^
ImportError: cannot import name 'db' from partially initialized module 'user' (most likely due to a circular import) (c:\Python\user.py)
即使我的
user.py
和 app.py
文件位于同一目录中,我也会收到 circular loop import
错误。我尝试了各种方法但找不到它。你能帮助我吗。另外,虽然我研究了这个错误,但我做不到。
随附的代码是我的Python文件:
app.py
# app.py
from flask import Flask, render_template, request, redirect, url_for, flash
from flask_sqlalchemy import SQLAlchemy
from user import db, Hasta # import relevant classes and database from user.py
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'
app.config['SECRET_KEY'] = 'your_secret_key_here'
db.init_app(app)
@app.route('/')
def index():
return render_template("index.html")
@app.route('/login', methods=['POST'])
def login():
username = request.form['username']
password = request.form['password']
# Here we can use Patient class
hasta = Hasta.query.filter_by(hasta_username=username, hasta_password=password).first()
if hasta:
flash('Giriş başarılı', 'success')
return redirect(url_for('hello'))
else:
flash('Kullanıcı adı veya şifre hatalı!', 'error')
return redirect(url_for('index'))
@app.route('/hello')
def hello():
return 'Hello, world!'
if __name__ == "__main__":
app.run(debug=True)
user.py
:
# user.py
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import ForeignKey
from sqlalchemy.orm import relationship
from datetime import datetime
from app import db # Import Flask app
class Admin(db.Model):
admin_id = db.Column(db.Integer, primary_key=True)
admin_username = db.Column(db.String(50), unique=True, nullable=False)
admin_password = db.Column(db.String(100), unique=True, nullable=False)
def __init__(self, admin_username, admin_password):
self.admin_username = admin_username
self.admin_password = admin_password
class Hasta(db.Model):
hasta_id = db.Column(db.Integer, primary_key=True)
hasta_username = db.Column(db.String(50), unique=True, nullable=False)
hasta_password = db.Column(db.String(100), unique=True, nullable=False)
hasta_name = db.Column(db.String(25), nullable=False)
hasta_surname = db.Column(db.String(25), nullable=False)
hasta_gender = db.Column(db.String(1), nullable=False)
hasta_birth = db.Column(db.DateTime, nullable=False)
hasta_tel = db.Column(db.String(16), nullable=False)
hasta_adres = db.Column(db.String(100), nullable=False)
hast_admID = db.Column(db.Integer, db.ForeignKey('admin.admin_id'))
admin = relationship("Admin")
class Doktor(db.Model):
doktor_id = db.Column(db.Integer, primary_key=True)
doktor_username = db.Column(db.String(50), unique=True, nullable=False)
doktor_password = db.Column(db.String(100), unique=True, nullable=False)
doktor_name = db.Column(db.String(25), nullable=False)
doktor_surname = db.Column(db.String(25), nullable=False)
dok_admID = db.Column(db.Integer, db.ForeignKey('admin.admin_id'))
admin = relationship("Admin")
dok_hastaID = db.Column(db.Integer, db.ForeignKey('hasta.hasta_id'))
hasta = relationship("Hasta")
class Randevu(db.Model):
randevu_id = db.Column(db.Integer, primary_key=True)
randevu_tar = db.Column(db.DateTime, nullable=False)
randevu_saat = db.Column(db.Time, nullable=False)
ran_HastID = db.Column(db.Integer, db.ForeignKey('hasta.hasta_id'))
hasta = relationship("Hasta")
ran_DokID = db.Column(db.Integer, db.ForeignKey('doktor.doktor_id'))
doktor = relationship("Doktor")
class Rapor(db.Model):
rapor_id = db.Column(db.Integer, primary_key=True)
rapor_tar = db.Column(db.DateTime, nullable=False)
rapor_Icer = db.Column(db.String(120), nullable=False)
rap_hasID = db.Column(db.Integer, db.ForeignKey('hasta.hasta_id'))
hasta = relationship("Hasta")
rap_dokID = db.Column(db.Integer, db.ForeignKey('doktor.doktor_id'))
doktor = relationship("Doktor")
rap_admID = db.Column(db.Integer, db.ForeignKey('admin.admin_id'))
admin = relationship("Admin")
# Uygulama bağlamı içinde veri eklemeyi deneyin
with db.app.app_context():
# Tablolara veri ekleniyor
admin1 = Admin(admin_username='ibardo', admin_password='yalova77')
db.session.add(admin1)
hasta1 = Hasta(hasta_username='gonul', hasta_password='malatya44', hasta_name='Gonul', hasta_surname='Dogan', hasta_gender='K', hasta_birth=datetime(1970, 11, 3), hasta_tel='5356741243', hasta_adres='ZaferMah. Malatya', admin=admin1)
hasta2 = Hasta(hasta_username='mustafa', hasta_password='yalova77', hasta_name='Mustafa', hasta_surname='Dogan', hasta_gender='E', hasta_birth=datetime(1968, 1, 4), hasta_tel='5325468264', hasta_adres='GocmenMah. Yalova', admin=admin1)
hasta3 = Hasta(hasta_username='rauf', hasta_password='eskisehir26', hasta_name='Rauf', hasta_surname='Dogan', hasta_gender='E', hasta_birth=datetime(1990, 3, 1), hasta_tel='5359856242', hasta_adres='Tepabasi Eskisehir', admin=admin1)
db.session.add(hasta1, hasta2, hasta3)
doktor1 = Doktor(doktor_username='pam', doktor_password='scranton', doktor_name='Pam', doktor_surname='Beesly', admin=admin1, hasta=hasta1)
doktor2 = Doktor(doktor_username='jim', doktor_password='usajim', doktor_name='Jim', doktor_surname='Halpert', admin=admin1, hasta=hasta2)
doktor3 = Doktor(doktor_username='mike', doktor_password='engmik', doktor_name='Mike', doktor_surname='Scott', admin=admin1, hasta=hasta3)
db.session.add(doktor1, doktor2, doktor3)
randevu1 = Randevu(randevu_tar=datetime(2024, 9, 8), randevu_saat=datetime(13, 0), hasta=hasta1, doktor=doktor1)
randevu2 = Randevu(randevu_tar=datetime(2025, 4, 2), randevu_saat=datetime(12, 0), hasta=hasta2, doktor=doktor2)
randevu3 = Randevu(randevu_tar=datetime(2024, 7, 1), randevu_saat=datetime(16, 0), hasta=hasta3, doktor=doktor3)
db.session.add(randevu1, randevu2, randevu3)
rapor1 = Rapor(rapor_tar=datetime(2024, 7, 3), rapor_Icer='None', hasta=hasta1, doktor=doktor1, admin=admin1)
rapor2 = Rapor(rapor_tar=datetime(2024, 5, 2), rapor_Icer='None', hasta=hasta2, doktor=doktor2, admin=admin1)
rapor3 = Rapor(rapor_tar=datetime(2024, 9, 1), rapor_Icer='None', hasta=hasta3, doktor=doktor3, admin=admin1)
db.session.add(rapor1, rapor2, rapor3)
db.session.commit()
Hasta在土耳其语中的意思是患者,我已经使用过多次
您面临的错误(
ImportError: cannot import name 'db' from partially initialized module 'user'
)称为循环导入错误:
app
(db
)导入
user.py
db
(user
)导入
app.py
由此我们可以说,当再次从
user
文件中的 db
导入 app.py
时,它会再次进入 app
或 app.py
文件导入应用程序,这会导致此循环错误
要解决此错误,您需要打破循环,具体方法如下。
创建一个新的Python文件 -
stating.py
:
该文件将包含所有初始化内容。
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'
app.config['SECRET_KEY'] = 'your_secret_key_here'
db = SQLAlchemy(app)
更新
user.py
:仅更改导入项目,因为我们已将其模式设置为stating.py
。
更改此:
from app import db
对此:
from stating import db
更新
app.py
:由于我们已将db
初始化移至stating.py
,请将其删除并将导入更改为从新位置导入
from flask import Flask, render_template, request, redirect, url_for, flash
from extensions import db
from user import Hasta
app = Flask(__name__)
db.init_app(app)