Я свободен sh до flask, и я был бы очень признателен, если кто-то может мне помочь, потому что я не могу справиться с этой проблемой весь день. Я определил таблицу с именем «users», затем запустил main.py
, и все в порядке. Но когда я пытаюсь обновить таблицу, ошибка
"sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: users" occures.
Пожалуйста, помогите, я чувствую себя действительно беспомощным.
Вот мой код:
project \ main.py
from flask import Flask
from data import db_session
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret_key'
db_session.global_init("db/blogs.sqlite")
def main():
app.run()
if __name__ == '__main__':
main()
project \ data \ db_session.py
import sqlalchemy as sa
import sqlalchemy.orm as orm
from sqlalchemy.orm import Session
import sqlalchemy.ext.declarative as dec
SqlAlchemyBase = dec.declarative_base()
__factory = None
def global_init(db_file):
global __factory
if __factory:
return
if not db_file or not db_file.strip():
raise Exception("You must specify a database file.")
conn_str = f'sqlite:///{db_file.strip() check_same_thread=False'
print(f"Connect to the database at {conn_str}")
engine = sa.create_engine(conn_str, echo=False)
__factory = orm.sessionmaker(bind=engine)
from data import __all_models
SqlAlchemyBase.metadata.create_all(engine)
def create_session() -> Session:
global __factory
return __factory()
project \ data__all_models.py
from data import users
project \ data \ users.py
import datetime
import sqlalchemy
from data.db_session import SqlAlchemyBase
from data import db_session
class User(SqlAlchemyBase):
__tablename__ = 'users'
id = sqlalchemy.Column(sqlalchemy.Integer,
primary_key=True, autoincrement=True)
name = sqlalchemy.Column(sqlalchemy.String, nullable=True)
about = sqlalchemy.Column(sqlalchemy.String, nullable=True)
email = sqlalchemy.Column(sqlalchemy.String,
index=True, unique=True, nullable=True)
hashed_password = sqlalchemy.Column(sqlalchemy.String, nullable=True)
created_date = sqlalchemy.Column(sqlalchemy.DateTime,
default=datetime.datetime.now)
user = User()
user.name = "user 1"
user.about = "user's bio"
user.email = "email@email"
session = db_session.create_session()
session.add(user)
session.commit()