标签: flask-sqlalchemy

只有在尚未存在的情况下才能创建新对象的最快方法(SQLAlchemy)

我正在寻找创建新SQLAlchemy对象的最快方法,只有在数据库中不存在它时.

我现在这样做的方法是首先获取查询的计数以查看它是否存在,如果不存在 - 然后我创建它.例如:

if not User.query.filter(email=user.email).count():
    db.session.add(user)
    db.session.commit()
Run Code Online (Sandbox Code Playgroud)

这是最好的方法吗?会喜欢一些反馈.谢谢!

python database postgresql sqlalchemy flask-sqlalchemy

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

PyCharm解析 - flask.ext.sqlalchemy vs flask_sqlalchemy

如果我在我的应用程序中使用以下格式,除PyCharms解析/自动完成功能外,一切正常:

from flask.ext.sqlalchemy import SQLAlchemy
Run Code Online (Sandbox Code Playgroud)

如果我在我的应用程序中使用以下格式,一切正常.但是,唉,这不是导入库的正确方法:

from flask_sqlalchemy import SQLAlchemy
Run Code Online (Sandbox Code Playgroud)

有没有办法让PyCharm正确解析第一个语法?

python pycharm flask python-2.7 flask-sqlalchemy

23
推荐指数
2
解决办法
9539
查看次数

Flask同时验证装饰器的多个字段

我一直在使用sqlalchemy.orm中的@validates装饰器来验证字段,只要所有字段彼此独立,所有字段都很顺利,例如:

@validates('field_one')
def validates_field_one(self, key, value):
   #field one validation

@validates('field_two')
def validates_field_two(self, key, value):
   #field two validation
Run Code Online (Sandbox Code Playgroud)

但是,现在我需要进行一些验证,这需要同时访问field_one和field_two.看起来验证接受验证装饰器的多个参数,但是,它只会为每个参数运行一次验证函数,如下所示:

@validates('field_one', 'field_two')
def validates_fields(self, keys, values):
   #field validation
Run Code Online (Sandbox Code Playgroud)

结果验证field_one的工作流程,然后验证field_two.但是,我想同时验证两者(一个简单的例子是断言field_one的值不是field_two的值,其中一个示例是禁止在图中的自循环,其中field_one和field_two引用节点,它正在边缘上执行验证).如何才能成为最佳方式?

python validation sqlalchemy flask flask-sqlalchemy

23
推荐指数
1
解决办法
1195
查看次数

在烧瓶和其他应用程序之间共享sqlalchemy模型

我有一个正在运行的Flask应用程序,它是根据我们在网上和Miguel Grinberg的"Flask Web Development"一书中找到的最佳实践组合而建立的.

我们现在需要第二个Python应用程序,它不是Web应用程序,需要访问与Flask应用程序相同的模型.我们想重复使用相同的模型,因此两个应用程序都可以从共享代码中受益.

我们已经删除了对flask-sqlalchemy扩展(我们之前使用过Flask应用程序时)的依赖关系.并将其替换为此处描述SQLalchemy Declarative扩展,这有点简单(Flask-SQLalchemy为标准SQLAlchemy添加了一些特定的东西)

根据示例,我们在根目录中创建了一个database.py文件.在我们的例子中,有两个与Declarative扩展示例不同的东西:我将引擎和会话放在一个类中,因为我们所有的模型都使用db.session而不是db_session,并且我将带有配置值的字典传递给init( ),以便我可以使用不同的配置从Flask和其他应用程序重新使用此database.py.它看起来像这样:

from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
from sqlalchemy.ext.declarative import declarative_base


class Database(object):

    def __init__(self, cfg):
        self.engine = create_engine(cfg['SQLALCHEMY_DATABASE_URI'], convert_unicode=True)
        self.session = scoped_session(sessionmaker(autocommit=False, autoflush=False, bind=self.engine))

    class Model(object):
        pass

Base = declarative_base()
Run Code Online (Sandbox Code Playgroud)

所以现在我们来解决实际问题.Flask创建一个包含配置选项的类字典对象,并将它们作为属性添加到app-instance.它从实例文件夹,站点根目录中的config.py和环境变量加载它们.我需要从Flask传递配置字典,所以我需要Flask来FIRST加载和组装配置,然后初始化数据库,并在app文件的根目录中有一个(配置的)db对象.但是,我们遵循应用工厂模式,因此我们可以针对不同情况(测试,生产,开发)使用不同的配置.

这意味着我们app/__init__.py看起来像这样(简化):

from flask import Flask
from database import Database
from flask.ext.mail import Mail
from flask_bcrypt import Bcrypt
from config import config …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy flask flask-sqlalchemy

23
推荐指数
1
解决办法
7097
查看次数

烧瓶应用的结构

我正在尝试使用Flask创建一个简单但非常简单的应用程序,并且我一直遇到文档中没有解释的情况.

我希望我的应用程序可以在不同的模块之间拆分,但看起来很难从主模块以外的任何其他地方访问主app对象(或db来自flask-sqlalchemy).看起来你必须真正编写自己的方式将它视为一切都可以访问的全局,这需要一些有问题的代码和一些时间.

双方appdb在那里的主要应用实例,每个实例假定他们可以在顶级水平的创建.但是如果我将不同的url处理程序拆分成不同的模块,我就失去了使用@app.route装饰器的能力.我可以解决这个问题app.add_url_rule('/...', some.module...),但是再次,app不会传递给该函数.

同样的事情发生在db- 我不知道我是应该坚持下去g,还是通过app某种方式让它可以访问.这样做并没有帮助我将模型移动到一个单独的模块中 - db导入它时我应该如何访问?所有示例再次假设它仅作为局部变量可用.

我错过了一些明显的东西,还是我想在这里使用烧瓶来完成错误的任务?

python flask flask-sqlalchemy

22
推荐指数
1
解决办法
4680
查看次数

如何使用新主键克隆sqlalchemy数据库对象

我想克隆一个sqlalchemy对象:

我试过了

product_obj = products.all()[0] #here products is service name

product_obj.product_uid = 'soemthing' #here product_uid is the pk of product model

products.save(product_obj)
Run Code Online (Sandbox Code Playgroud)

它只是更新old_object

这是products.save函数的代码

class Service(object):

        __model__ = None

       def save(self, model):
            self._isinstance(model)
            db.session.add(model)
            db.session.commit()
            return model
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy python-2.7 flask-sqlalchemy

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

读取从机,读写主机设置

我有一个使用单个mysql服务器的Flask,SQLAlchemy webapp.我想扩展数据库设置以具有只读从​​属服务器,以便我可以在继续写入主数据库服务器的同时在主服务器和从服务器之间传播读取.

我已经看了几个选项,我相信我不能用简单的SQLAlchemy做到这一点.相反,我计划在我的webapp中创建2个数据库句柄,每个句柄用于主数据库服务器和从数据库服务器.然后使用简单的随机值使用主/从db句柄进行"SELECT"操作.

但是我不确定这是否是使用SQLAlchemy的正确方法.关于如何解决此问题的任何建议/提示?提前致谢.

python mysql sqlalchemy flask flask-sqlalchemy

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

如何使Flask SQLAlchemy重用数据库连接?

我似乎无法让我的Flask应用程序关闭或重用数据库连接.我正在使用PostgreSQL 9.1.3和

Flask==0.8
Flask-SQLAlchemy==0.16
psycopg2==2.4.5
Run Code Online (Sandbox Code Playgroud)

当我的测试套件运行时,打开的连接数量会攀升,直到达到20(max_connections设置为止postgresql.conf),然后我看到:

OperationalError: (OperationalError) FATAL:  sorry, too many clients already
 None None
Run Code Online (Sandbox Code Playgroud)

我已经减少了代码,它只是调用点create_alldrop_all(但不发出任何SQL,因为没有型号).

我在日志中看到要检入的连接:

DEBUG:sqlalchemy.pool.QueuePool:Connection <connection object at 0x101c1dff0; dsn: 'dbname=cx_test host=localhost', closed: 0> checked out from pool
DEBUG:sqlalchemy.pool.QueuePool:Connection <connection object at 0x101c1dff0; dsn: 'dbname=cx_test host=localhost', closed: 0> being returned to pool
WARNING:root:impl   <-------- That's the test running
DEBUG:sqlalchemy.pool.QueuePool:Connection <connection object at 0x101c1dff0; dsn: 'dbname=cx_test host=localhost', closed: 0> checked out from pool
DEBUG:sqlalchemy.pool.QueuePool:Connection <connection object at 0x101c1dff0; dsn: …
Run Code Online (Sandbox Code Playgroud)

postgresql sqlalchemy flask flask-sqlalchemy

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

AWS Elastic Beanstalk错误 - ImportError:没有名为flask.ext.sqlalchemy的模块

我将我的烧瓶应用程序部署到aws beanstalk并遇到导入错误:

ImportError: No module named flask.ext.sqlalchemy
Run Code Online (Sandbox Code Playgroud)

在我的application.py文件中,我有这个声明

from flask.ext.sqlalchemy import SQLAlchemy
Run Code Online (Sandbox Code Playgroud)

它在我的机器上运行良好,但在aws弹性豆柄中不起作用.

有人遇到过类似的问题吗?

python amazon-web-services flask flask-sqlalchemy amazon-elastic-beanstalk

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

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万
查看次数