我试图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) 我想知道是否有人知道如何从烧瓶模板中的查询输出结果的数量.
示例视图代码:
products = Product.query.all()
Run Code Online (Sandbox Code Playgroud)
在模板中,能够做到这一点很方便:
{{ products.count() }}
Run Code Online (Sandbox Code Playgroud)
反正有没有这样做,或者有没有人写过这样做的过滤器?
干杯,
我正在使用该flask-login库,我无法找到任何关于如何允许用户通过电子邮件重置密码的好教程或文档.我可以看看如何做到这一点的方向/资源?彻底的谷歌搜索没有透露任何有用的东西.
我的应用程序使用Flask,Flask-SQLAlchemy,Flask-WTF和Jinja2的组合.
在目前的版本中,我有一个设置表.该表只有一个记录,包含一个字段.最初该表包含零记录.
我想要实现的是:
这是我的代码:
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) 对于我的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,那么这将完全解决问题.
我正在使用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模型指定为无符号整数?
我对于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) 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也是如此(或者可以吗?).
在 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'?
我有一个在 Gunicorn 中运行的 Flask-SQLAlchmey 应用程序连接到 PostgreSQL 数据库,但我无法确定pool_size值应该是什么以及我应该期望有多少数据库连接。
这是我对事情如何运作的理解:
到目前为止,这是正确的吗?如果这是正确的,那么对于在 Gunicorn 中运行的同步 Flask 应用程序:
是否有理由pool_size应该大于线程数?那么,对于启动的 gunicorn 应用程序gunicorn --workers=5 --threads=2 main:app应该pool_size是 2?如果我只使用工人,而不使用线程,是否有任何理由pool_size大于 1?
flask-sqlalchemy ×10
flask ×8
python ×7
mysql ×2
sqlalchemy ×2
alembic ×1
amazon-rds ×1
database ×1
flask-login ×1
gunicorn ×1
migration ×1
wtforms ×1