标签: flask-sqlalchemy

Flask-SQLAlchemy - 模型没有属性'foreign_keys'

我有3个使用Flask-SQLalchemy创建的模型:User,Role,UserRole

user.py:

class Role( ActiveRecord, db.Model ):

    __tablename__ = "roles"

    #   Schema
    id = db.Column( db.Integer, primary_key = True )
    name = db.Column( db.String( 24 ), unique = True )
    description = db.Column( db.String( 90 ) )

    users = db.relationship( "User", secondary = "UserRole", \
        backref = db.backref( "roles" ) )
Run Code Online (Sandbox Code Playgroud)

role.py:

class User( db.Model, ActiveRecord ):

    __tablename__ = "users"

    #   Schema
    id = db.Column( db.Integer, primary_key = True )
    email = db.Column( db.String( 90 ), unique = True ) …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy flask flask-sqlalchemy

21
推荐指数
1
解决办法
1万
查看次数

Flask-Migrate不创建表

我在文件中有以下模型listpull/models.py:

from datetime import datetime

from listpull import db


class Job(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    list_type_id = db.Column(db.Integer, db.ForeignKey('list_type.id'),
                             nullable=False)
    list_type = db.relationship('ListType',
                                backref=db.backref('jobs', lazy='dynamic'))
    record_count = db.Column(db.Integer, nullable=False)
    status = db.Column(db.Integer, nullable=False)
    sf_job_id = db.Column(db.Integer, nullable=False)
    created_at = db.Column(db.DateTime, nullable=False)
    compressed_csv = db.Column(db.LargeBinary)

    def __init__(self, list_type, created_at=None):
        self.list_type = list_type
        if created_at is None:
            created_at = datetime.utcnow()
        self.created_at = created_at

    def __repr__(self):
        return '<Job {}>'.format(self.id)


class ListType(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(80), unique=True, nullable=False)

    def …
Run Code Online (Sandbox Code Playgroud)

python flask flask-sqlalchemy flask-migrate

21
推荐指数
5
解决办法
2万
查看次数

使用Flask-SQLAlchemy在Alembic自动生成迁移时未检测到任何更改

我无法让Alembic使用db.Model(Flask-SQLAlchemy)而不是使用(Flask-SQLAlchemy)自动生成从更改到类的候选迁移Base.

我已修改env.py为创建我的Flask应用程序,导入所有相关模型,初始化数据库,然后运行迁移:

...
uri = 'mysql://user:password@host/dbname?charset=utf8'
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = uri
app.config['SQLALCHEMY_ECHO'] = True
db.init_app(app)
with app.test_request_context():
    target_metadata = db.Model.metadata
    config.set_main_option('sqlalchemy.url', uri)
    if context.is_offline_mode():
        run_migrations_offline()
    else:
        run_migrations_online()
...
Run Code Online (Sandbox Code Playgroud)

这种方法工作正常drop_all(),create_all()(例如,重新创建单元测试的测试分贝时),但似乎在这种情况下落空.自动生成的版本脚本始终具有空的升级和降级方法,例如,

def upgrade():
    ### commands auto generated by Alembic - please adjust! ###
    pass
    ### end Alembic commands ###


def downgrade():
    ### commands auto generated by Alembic - please adjust! ###
    pass
    ### end Alembic commands ###
Run Code Online (Sandbox Code Playgroud)

我的更改包括重命名列,更改列定义等 …

sqlalchemy database-migration flask flask-sqlalchemy alembic

20
推荐指数
3
解决办法
1万
查看次数

sqlalchemy,选择使用反向包含(不在)子列值列表

我在flask-sqlalchemy中有一个典型的帖子/标签(许多标签与一个帖子相关),我想选择没有用我提供的列表中的任何标签标记的帖子.首先,我建立的模型:

class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    tags = db.relationship('Tag', lazy='dynamic')

class Tag(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.Text(50))
    post_id = db.Column(db.Integer, db.ForeignKey('post.id'))
Run Code Online (Sandbox Code Playgroud)

就像是

db.session.query(Post).filter(Post.tags.name.notin_(['dont','want','these']))

失败了

AttributeError: Neither 'InstrumentedAttribute' object nor 'Comparator' object associated with Post.tags has an attribute 'name'

我假设是因为标签是关系而不是列.当我手动编写实际的SQL时,我在另一个项目上工作.这是有效的SQL:

SELECT * FROM $posts WHERE id NOT IN (SELECT post_id FROM $tags WHERE name IN ('dont','want','these'))

我如何使用sqlalchemy API实现这一目标?

python sqlalchemy flask-sqlalchemy

20
推荐指数
3
解决办法
2万
查看次数

如何在Flask-SQLAlchemy中声明基本模型类?

我想声明一个所有其他模式对象都可以继承的基类,例如:

class Base(db.Model):
    created_on = db.Column(db.DateTime, default=db.func.now())
    updated_on = db.Column(db.DateTime, default=db.func.now(), onupdate=db.func.now())
Run Code Online (Sandbox Code Playgroud)

然后所有其他模式对象都可以从它继承而不必重复两列的声明.

我如何在Flask-SQLAlchemy中执行此操作?

from flask.ext.sqlalchemy import SQLAlchemy
db = SQLAlchemy(app)

class User(db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key = True)
    email = db.Column(db.String(255), unique = True)
Run Code Online (Sandbox Code Playgroud)

sqlalchemy flask flask-sqlalchemy

20
推荐指数
1
解决办法
9853
查看次数

uWSGI中的Flask仅导入SQLAlchemy导致500内部服务器错误

TL; DR编辑:我没有设置正确的文件夹权限.


当我运行烧瓶时,一切正常source venv/bin/activate && python run.py.

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

app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello, world!"

if __name__ == "__main__":
    app.debug = True
    app.run(host='0.0.0.0', port=8080)
Run Code Online (Sandbox Code Playgroud)

但是当我使用nginx/emperor.uwsgi运行相同的应用程序时,每次命中服务器都会返回500.如果我注释掉SQLAlchemy导入,那么页面会按预期加载.


根据这个线程我尝试启用lazy/lazy-app,但它没有任何效果.Flask正在引发异常,因此nginx/uwsgi没有记录任何内容.

我尝试过使用from werkzeug.debug import DebuggedApplication但仍然只是在我的浏览器中获得绝对的"内部服务器错误".


配置:

[uwsgi]
uid = http
gid = http

socket = /var/run/project.uwsgi.sock
chown-socket = http
chmod-socket = 664

pidfile = /var/run/project.master.pid

master = true
lazy = true
lazy-apps = true

chdir = /srv/http/project
python-path = …
Run Code Online (Sandbox Code Playgroud)

python nginx flask uwsgi flask-sqlalchemy

20
推荐指数
1
解决办法
3540
查看次数

Flask-SQLAlchemy db.create_all() 得到了意外的关键字参数“app”

我正在遵循使用 Flask-SQLAlchemy 创建 Flask 应用程序的教程。但是,在创建数据库时它开始引发错误。如何创建数据库?

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

def create_app():
    app = Flask(__name__)
    app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///project.db"
    db.init_app(app)

    from . import models

    create_database(app)
    return app

def create_database(app):
    if not path.exists("website/project.db"):
        db.create_all(app=app)
        print("created database")
Run Code Online (Sandbox Code Playgroud)

该行db.create_all(app=app)给了我这个错误:

SQLAlchemy.create_all() got an unexpected keyword argument 'app'
Run Code Online (Sandbox Code Playgroud)

python flask flask-sqlalchemy

20
推荐指数
1
解决办法
2万
查看次数

SQLAlchemy可以与Google Cloud SQL一起使用吗?

我查看了Google Cloud SQL的文档和各种搜索,但我无法确定是否可以将SQLAlchemy与Google Cloud SQL一起使用,如果是,那么连接URI应该是什么.

我想使用Flask-SQLAlchemy扩展,需要连接字符串,如下所示: mysql://username:password@server/db

我看到了Django示例,但看起来配置使用的风格与连接字符串不同. https://developers.google.com/cloud-sql/docs/django

Google Cloud SQL文档:https: //developers.google.com/cloud-sql/docs/developers_guide_python

python google-app-engine sqlalchemy flask-sqlalchemy google-cloud-sql

19
推荐指数
4
解决办法
1万
查看次数

Alembic - 自发生成空迁移

我试图Alembic第一次使用,并希望使用此处--autogenerate描述的功能

我的项目结构看起来像

project/
       configuration/
                    __init__.py
                    dev.py
                    test.py
       core/
           app/
              models/
                    __init__.py
                    user.py
       db/
          alembic/
                  versions/
                  env.py
          alembic.ini
Run Code Online (Sandbox Code Playgroud)

我使用Flask,并SQLAlchemy和他们的Flask-SQLAlchemy扩展.我的模特User看起来像

class User(UserMixin, db.Model):
    __tablename__ = 'users'
    # noinspection PyShadowingBuiltins
    uuid = Column('uuid', GUID(), default=uuid.uuid4, primary_key=True,
                  unique=True)
    email = Column('email', String, nullable=False, unique=True)
    _password = Column('password', String, nullable=False)
    created_on = Column('created_on', sa.types.DateTime(timezone=True),
                        default=datetime.utcnow())
    last_login = Column('last_login', sa.types.DateTime(timezone=True),
                        onupdate=datetime.utcnow())
Run Code Online (Sandbox Code Playgroud)

如上所述这里,我修改env.py的样子

from configuration import app

alembic_config = config.get_section(config.config_ini_section) …
Run Code Online (Sandbox Code Playgroud)

python migration flask flask-sqlalchemy alembic

19
推荐指数
5
解决办法
2万
查看次数

在哪里可以找到Flask SQLAlchemy Column类型和选项的列表?

我希望这里正确使用"类型"这个词.也许我的意思是"论据".随意编辑.

我正在使用带有SQLAlchemy的Flask模型创建数据库,在哪里可以找到所有不同可能的Column参数的列表,例如:

account_id = db.Column(db.Integer, nullable=False)

我知道一些明显的类型,如db.Integerdb.String.但是我似乎无法在SQL Alchemy文档或Flask文档中找到创建db.Column实例的所有可能参数的列表.我看错了吗?

有没有办法区分像db.Integertinyint,bigint等的东西?

至于选项,例如nullable=False,我在创建db.Column实例时找不到所有可能选项的良好列表.

python sqlalchemy flask-sqlalchemy

19
推荐指数
2
解决办法
2万
查看次数