标签: flask-sqlalchemy

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查询结果的数量

我想知道是否有人知道如何从烧瓶模板中的查询输出结果的数量.

示例视图代码:

products = Product.query.all()
Run Code Online (Sandbox Code Playgroud)

在模板中,能够做到这一点很方便:

{{ products.count() }}
Run Code Online (Sandbox Code Playgroud)

反正有没有这样做,或者有没有人写过这样做的过滤器?

干杯,

flask flask-sqlalchemy

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

Flask-Login密码重置

我正在使用该flask-login库,我无法找到任何关于如何允许用户通过电子邮件重置密码的好教程或文档.我可以看看如何做到这一点的方向/资源?彻底的谷歌搜索没有透露任何有用的东西.

flask flask-sqlalchemy flask-login

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

Flask-SQLAlchemy:如何有条件地插入或更新行

我的应用程序使用Flask,Flask-SQLAlchemy,Flask-WTF和Jinja2的组合.

在目前的版本中,我有一个设置表.该表只有一个记录,包含一个字段.最初该表包含零记录.

我想要实现的是:

  • 假设db中没有条目,则显示准备用户输入的空表单
  • 鉴于存在条目,显示条目,和
  • 如果用户更改了值,则更新db中的rec.

这是我的代码:

models.py

class Provider(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    rssfeed = db.Column(db.String(120), unique = True)

    def __init__(self, rssfeed):
        self.rssfeed = rssfeed

    def __repr__(self):
        return '<NZBMatrix feed url %r>' % self.rssfeed
Run Code Online (Sandbox Code Playgroud)

forms.py

class SettingsForm(Form):
    rssfeed = TextField('rssfed', validators= [Required()])
Run Code Online (Sandbox Code Playgroud)

views.py

    @app.route('/settings', methods=["GET","POST"])
    def settings():
    """ show settings """
        provider = Provider.query.get(1)
        form = SettingsForm(obj=provider)
        print provider

        if request.method == "POST" and form.validate():
            if Provider.query.get(1) is None:
                provider = Provider(rssfeed=form.rssfeed.data)
                form.populate_obj(provider)
                db.session.add(provider)
                db.session.commit()
                flash("Settings added") …
Run Code Online (Sandbox Code Playgroud)

python flask wtforms flask-sqlalchemy flask-wtforms

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

使用Flask-SQLAlchemy连接到AWS RDS MySQL数据库实例

对于我的Flask应用程序,我想使用Flask-SQLAlchemy扩展来连接我在AWS RDS上创建的数据库实例.

当我尝试连接时,应用程序超时,我收到以下错误:

sqlalchemy.exc.OperationalError :( OperationalError)(2003,"无法连接到MySQL服务器'xxxxxxxxxxxxxxx.xxxxxxxxxxxx.us-east-1.rds.amazonaws.com'(60")

我的代码看起来像这样:

from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
application = Flask(__name__)

application.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://{master username}:{db password}@{endpoint}/{db instance name}'
db = SQLAlchemy(application)

@application.route('/')
def hello_world():
    return 'Hello World'

if __name__ == '__main__':
    application.run()
Run Code Online (Sandbox Code Playgroud)

瓶-SQLAlchemy的文档说,SQLALCHEMY_DATABASE_URI对mysql数据库连接的格式应该是这样的:

mysql://username:password@server/db
Run Code Online (Sandbox Code Playgroud)

此外,我可以检查AWS RDS控制台以获取有关我的数据库实例的信息.控制台看起来像这样.

现在我假设SQLAlchemy中的"用户名"是指AWS RDS控制台中的"主用户名",SQLAlchemy中的"server"是指AWS RDS控制台中的"端点","db"是指"数据库"实例名称"

我究竟做错了什么??

如果有人可以使用AWS RDS控制台术语为我描述SQLALCHEMY_DATABASE_URI,那么这将完全解决问题.

mysql amazon-rds flask-sqlalchemy

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

如何在SQLAlchemy中定义无符号整数

我正在使用Flask-SQLAlchemy(MySQL)将门户迁移到Flask.下面是我用于为现有门户创建数据库的代码:

 Users = """CREATE TABLE Users(
           id INT UNSIGNED AUTO_INCREMENT NOT NULL,
           UserName VARCHAR(40) NOT NULL,
           FirstName VARCHAR(40) NOT NULL,
           LastName VARCHAR(40) NOT NULL,
           EmailAddress VARCHAR(255) NOT NULL,      
           Password VARCHAR(40) NOT NULL,    
           PRIMARY KEY (id)
           ) """
Run Code Online (Sandbox Code Playgroud)

以下是我在SQLAlchemy中尝试使用它的方法:

 class Users(db.Model):
      id           = db.Column(db.Integer, primary_key=True)
      UserName     = db.Column(db.String(40))
      FirstName    = db.Column(db.String(40))
      LastName     = db.Column(db.String(40))
      EmailAddress = db.Column(db.String(255))
      Password     = db.Column(db.String(40))
Run Code Online (Sandbox Code Playgroud)

我的问题是,如何将SQLAlchemy模型指定为无符号整数?

python mysql flask flask-sqlalchemy

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

使用SQLAlchemy对象中的数据预填充烧瓶中的WTforms

我对于flask框架相当新,并且正在为webportal创建一个编辑配置文件页面.我陷入困境,无法自动填写表格.

这是我的表单类:

class EditProfile(Form):

    username = TextField('Username', [Required()])
    email = TextField('Email', [Required()])
    about = TextAreaField('About', [Required()])
    website = TextField('Website', [Required()])
Run Code Online (Sandbox Code Playgroud)

这是我评估表单的函数.

def editprofile(nickname = None):
    if g.fas_user['username'] == nickname  or request.method == 'POST':
        form = EditProfile()
        form_action = url_for('profile.editprofile')
        if request.method == 'POST' and form.validate():
            if form.username.data == nickname : 
              query = EditProfile(form.username.data,
                                 form.email.data,
                                 form.about.data,
                                 form.website.data,
                                 )
              print query #debug
              db.session.add(query)
              db.session.commit()
              flash('User Updated')
              print "added"
            return(url_for('profile.editprofile'))
        return render_template('profile/add.html', form=form,
                               form_action=form_action, title="Update Profile")
    else:
        return "Unauthorised"
Run Code Online (Sandbox Code Playgroud)

我的表单形式的html模板是:

{% extends "base.html" …
Run Code Online (Sandbox Code Playgroud)

python flask flask-sqlalchemy flask-wtforms

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

我可以在Flask和SQLAlchemy中避免循环导入

app/init .py:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__ name __)
db = SQLAlchemy(app)  
from app import views, models
Run Code Online (Sandbox Code Playgroud)

应用程序/ models.py:

from app import db  # I want to avoid this everywhere
Run Code Online (Sandbox Code Playgroud)

我真的不喜欢我的子模块依赖于他们的父级.也可以避免全局包变量吗?我想要更多的OO解决方案.

app的一个替代方案是使用我认为的蓝图,但随后我松开了路径装饰器.对于带有SQLAlchemy的db也是如此(或者可以吗?).

python flask flask-sqlalchemy

18
推荐指数
2
解决办法
7561
查看次数

Flask-SQLAlchemy backref 函数和 backref 参数

在 Flask-SQLAlchemy 中,关系方法中的 backref 参数允许您在指定的类下声明一个新属性,如其文档中的示例所示:

class Person(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50))
    addresses = db.relationship('Address', backref='person', lazy='dynamic')

class Address(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(50))
    person_id = db.Column(db.Integer, db.ForeignKey('person.id'))
Run Code Online (Sandbox Code Playgroud)

但是还有一个backref功能:

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50))
    addresses = db.relationship('Address',
                                backref=db.backref('person', lazy='joined'), 
                                lazy='dynamic')
Run Code Online (Sandbox Code Playgroud)

在这种情况下,backref传递给backref参数的函数的作用是什么,尤其是多个lazy定义?它与 有什么不同backref='person'

python sqlalchemy flask flask-sqlalchemy

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

为在 Gunicorn 上运行的 Flask-SQLAlchemy 应用程序选择 DB pool_size

我有一个在 Gunicorn 中运行的 Flask-SQLAlchmey 应用程序连接到 PostgreSQL 数据库,但我无法确定pool_size值应该是什么以及我应该期望有多少数据库连接。

这是我对事情如何运作的理解:

  • Python 3.7 中的进程不共享内存
  • 每个 Gunicorn 工人都是它自己的过程
  • 因此,每个 Gunicorn worker 将获得它自己的数据库连接池副本,并且不会与任何其他 worker 共享
  • Python 中的线程共享内存
  • 因此,Gunicorn worker 中的任何线程都将共享一个数据库连接池

到目前为止,这是正确的吗?如果这是正确的,那么对于在 Gunicorn 中运行的同步 Flask 应用程序:

  • 最大数据库连接数=(worker数)*(每个worker的线程数)?
  • 在一个 worker 中,它使用的池中的连接数是否会超过 worker 数?

是否有理由pool_size应该大于线程数?那么,对于启动的 gunicorn 应用程序gunicorn --workers=5 --threads=2 main:app应该pool_size是 2?如果我只使用工人,而不使用线程,是否有任何理由pool_size大于 1?

python database sqlalchemy gunicorn flask-sqlalchemy

18
推荐指数
3
解决办法
3004
查看次数