这是我的目录
hotel/
___grandluis/
______main/
______static/
______templates/
______users/
______config.py
______models.py
___migrations/
______versions/
___run.py
___app.db
我的问题是我希望我的app.db位于grandluis
文件夹中。因为每次我运行python run.py db migrate
。我的app.db在grandluis
文件夹之外创建,当我通过我的应用程序向数据库添加内容时,它在grandluis
文件夹内创建了另一个app.db。我不喜欢我的烧瓶应用程序只读取grandluis
文件夹内的app.db,而不读取grandluis
文件夹外的app.db。因为它会导致错误。它说没有创建SQLAlchemy.model
。因为我的应用程序仅读取grandluis
内部的app.db。因此,我希望每次命令迁移时都希望它会创建/影响grandluis
文件夹中的app.db。我真的想要一些答案的家伙,非常感谢您有时间阅读我的这个荒谬的问题。
-models.py-
from datetime import datetime
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer
from flask import current_app
from grandluis import db, loginManager
from flask_login import UserMixin
@loginManager.user_loader
def load_user(user_id):
return User.query.get(int(user_id))
class User(db.Model, UserMixin):
UserId = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(300), nullable=False)
address = db.Column(db.String(100), nullable=False)
contact = db.Column(db.String(100), nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
username = db.Column(db.String(20), unique=True, nullable=False)
password = db.Column(db.String(60), nullable=False)
class Room(db.Model):
roomId = db.Column(db.Integer, primary_key=True)
roomNum = db.Column(db.String(100), nullable=False)
roomType = db.Column(db.String(100), nullable=False)
roomPrice = db.Column(db.Integer, nullable=False)
roomStatus = db.Column(db.String(100), nullable=False)
class Meals(db.Model):
mealId = db.Column(db.Integer, primary_key=True)
mealName = db.Column(db.String(100), nullable=False)
mealType = db.Column(db.String(100), nullable=False)
mealPrice = db.Column(db.String(100), nullable=False)
mealStatus = db.Column(db.String(100), nullable=False)
class Service(db.Model):
serId = db.Column(db.Integer, primary_key=True)
serName = db.Column(db.String(100), nullable=False)
serPrice = db.Column(db.String(100), nullable=False)
serStatus = db.Column(db.String(100), nullable=False)
class Guest(db.Model, UserMixin):
GuestId = db.Column(db.Integer, primary_key=True)
firstName = db.Column(db.String(100), nullable=False)
lastName = db.Column(db.String(100), nullable=False)
middleName = db.Column(db.String(100), nullable=False)
address = db.Column(db.String(100), nullable=False)
username = db.Column(db.String(20), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
image_file = db.Column(db.String(20), nullable=False, default='default.jpg')
password = db.Column(db.String(60), nullable=False)
#posts = db.relationship('Post', backref='author', lazy=True)
def get_reset_token(self, expires_sec=1800):
s = Serializer(current_app.config['SECRET_KEY'], expires_sec)
return s.dumps({'guest_id': self.id}).decode('utf-8')
@staticmethod
def verify_reset_token(token):
s = Serializer(current_app.config['SECRET_KEY'])
try:
user_id = s.loads(token)['guest_id']
except:
return None
return Guest.query.get(user_id)
def __repr__(self):
return f"Guest('{self.username}', '{self.email}', '{self.image_file}')"
-config.py-
class Config:
SECRET_KEY = 'XXXXXXXXXXX'
SQLALCHEMY_DATABASE_URI = 'sqlite:///app.db'
MAIL_SERVER = 'smtp.googlemail.com'
MAIL_PORT = 587
MAIL_USE_TLS = True
MAIL_USERNAME = 'xxxxxx@gmail.com'
MAIL_PASSWORD = 'xxxxxx'
-run.py-
from grandluis import db, createApp
from flask_migrate import MigrateCommand
from flask_script import Manager
app = createApp()
manager = Manager(app)
manager.add_command('db', MigrateCommand)
if __name__ == '__main__':
manager.run()
答案 0 :(得分:0)
我认为问题出在Config.py python文件中。您应该正确指定数据库的路径。像这样更改代码
首先将os库导入config.py文件。
import os
然后创建一个变量。就我而言,我将该变量命名为basedir
basedir = os.path.abspath(os.path.dirname(__file__))
现在,您可以指定数据库的路径。如下更改您的SQLALCHEMY_DATABASE_URI
SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or \
'sqlite:///' + os.path.join(basedir, 'hotel\\grandluis\\app.db')
SQLALCHEMY_TRACK_MODIFICATIONS = False
转到您的run.py python文件并进行这些更改
from grandluis import db, createApp
from flask_migrate import MigrateCommand
from flask_script import Manager
fro flask_sqlalchemy import SQLAlchemy
app = createApp()
db = SQLAlchemy(app)
manager = Manager(app)
manager.add_command('db', MigrateCommand)
db.init_app(app)
db.app = app
db.create_all()
if __name__ == '__main__':
manager.run()