gpt4 book ai didi

python - Flask SQLAlchemy db.create_all() 不创建数据库

转载 作者:太空狗 更新时间:2023-10-30 02:20:03 39 4
gpt4 key购买 nike

我似乎不明白为什么我对 db.create_all() 的调用不起作用。

我有一个带有以下初始化的应用程序包:

from flask import Flask
from config import config
from flask.ext.sqlalchemy import SQLAlchemy

# create the database object
db = SQLAlchemy()

# this function is the application factory
def create_app(environment):
app = Flask(__name__)
app.config.from_object(config[environment])

db.init_app(app)

from bp_root import bp_root
from bp_aws import bp_aws

app.register_blueprint(bp_root, url_prefix='/')
app.register_blueprint(bp_aws, url_prefix='/aws')

return app

然后我在应用程序包中有 models.py:

from datetime import datetime
from . import db

class MyTestClass(db.Model):
__tablename__ = 'mytesttable'
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(64), nullable=False, unique=True, index=True)
username = db.Column(db.String(64), nullable=False, unique=True, index=True)
is_admin = db.Column(db.Boolean)
password_hash = db.Column(db.String(128))
location = db.Column(db.String(64))
member_since = db.Column(db.DateTime, default=datetime.utcnow)
bio = db.Column(db.Text())

def __init__(self, email, username):
self.email = email
self.username = username

def __repr__(self):
return '<User %r>' % self.username

app.config 包含以下内容:

'SQLALCHEMY_DATABASE_URL': 'sqlite:////Users/xxxxx/projects/yyyyy/data-dev.sqlite'

然后,如果我启动我的交互式 shell,您可以看到对象适本地存在并且调用 db.create_all() 似乎有效,但结果没有创建数据库:

$ ./manage.py shell
>>> from app import db
>>> from app import models
>>> app
<Flask 'app'>
>>> db
<SQLAlchemy engine='sqlite://'>
>>> models
<module 'app.models' from '/Users/xxxxx/projects/yyyyy/app/models.py'>
>>> dir(models)
['MyTestClass', '__builtins__', '__doc__', '__file__', '__name__', '__package__', 'datetime', 'db']
>>> db.create_all()
>>>

关于为什么没有创建数据库有什么想法吗?

最佳答案

设置应该是SQLALCHEMY_DATABASE_<strong>URI</strong> , 不是 URL .当您运行此行时,您可以看到数据库没有正确的 uri:

>>> db
<SQLAlchemy engine='sqlite://'>

它表明 Flask-SQLAlchemy 默认使用内存中的 sqlite 数据库。更改设置即可。

从 Flask-SQLAlchemy 3 开始,它将引发错误而不是使用默认值。

RuntimeError: Either 'SQLALCHEMY_DATABASE_URI' or 'SQLALCHEMY_BINDS' must be set

关于python - Flask SQLAlchemy db.create_all() 不创建数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25648170/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com