标签: flask-sqlalchemy

在 postgresql 上从 sqlalchemy 执行原始 sql 查询

我有一个原始的 sql 查询,它是:

select distinct(user_id) from details_table where event_id in (29,10) and user_id in (7,11,24,45) and epoch_timestamp >= 1433116800 and epoch_timestamp <= 1506816000;
Run Code Online (Sandbox Code Playgroud)

这在psql收益:

 user_id 
---------
       7
      24
(2 rows)
Run Code Online (Sandbox Code Playgroud)

现在,当我通过 sqlalchemy 运行这个原始 sql 查询时,我得到了一个sqlalchemy.engine.result.ResultProxy对象作为响应,而不是上面的结果。我现在使用的代码如下:

from flask import current_app
sql_query = text(select distinct(user_id) from details_table where event_id in (29,10) and user_id in (7,24) and epoch_timestamp >= 1433116800 and epoch_timestamp <= 1506816000;)

filtering_users = db.get_engine(current_app, bind='<my_binding>')\
                    .execute(sql_query)
print(type(filtering_users))
# <class 'sqlalchemy.engine.result.ResultProxy'>
print(filtering_users)
# <sqlalchemy.engine.result.ResultProxy object at 0x7fde74469550> …
Run Code Online (Sandbox Code Playgroud)

python postgresql sqlalchemy flask-sqlalchemy

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

SQLAlchemy 获取最大值

我试图在一个属性的表中获取最大值,该属性是风险:

我在跑步:

func.max(HostsModel.risk)
Run Code Online (Sandbox Code Playgroud)

我回来了:

<sqlalchemy.sql.functions.max at 0x10f0721d0; max>
Run Code Online (Sandbox Code Playgroud)

我如何真正从中获得价值?

我将这些视为可用功能:

 dir(func.max(HostsModel.risk))
['__add__', '__and__', '__bool__', '__class__', '__contains__', '__delattr__', '__dict__', '__dir__', '__div__', '__doc__', '__eq__', '__format__', '__ge__', '__getattr__', '__getattribute__', '__getitem__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__module__', '__mul__', '__ne__', '__neg__', '__new__', '__nonzero__', '__or__', '__radd__', '__rdiv__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__rshift__', '__rsub__', '__rtruediv__', '__setattr__', '__sizeof__', '__slots__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__visit_name__', '__weakref__', '_allow_label_resolve', '_alt_names', '_annotate', '_annotations', '_bind', '_bind_param', '_clone', '_cloned_set', '_cols_populated', '_compare_name_for_result', '_compiler', '_compiler_dispatch', '_constructor', '_copy_internals', '_deannotate', '_execute_on_connection', '_execution_options', …
Run Code Online (Sandbox Code Playgroud)

python sql sqlalchemy flask-sqlalchemy

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

尽管已设置密码并在连接 uri 中输入,但用户 root@localhost 的 mysql 访问被拒绝(使用密码:否)

我正在尝试在 Flask 应用程序中使用 pymysql 和 Flask-sqlalchemy 配置一个 mysql 数据库。

db = SQLAlchemy()
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:password@localhost:3306/ftm'
db.init_app(app)
Run Code Online (Sandbox Code Playgroud)

但是,当我运行我的应用程序时,我得到:

OperationalError: (pymysql.err.OperationalError) (1045, u"Access denied for user 'root'@'localhost' (using password: NO)")
Run Code Online (Sandbox Code Playgroud)

我尝试重置密码,并验证它是否有效:从命令行,我可以通过以下方式输入 mysql:

mysql -u root -p
Run Code Online (Sandbox Code Playgroud)

然后在提示下输入我的密码。有没有人知道为什么 mysql 似乎认为我试图在没有密码的情况下进行连接,即使我在 URI 中有一个(有效的)密码?

请注意,这是与mysql_exceptions.OperationalError: (1045, "Access denied for user 'root'@'localhost' (using password: YES)")和其他潜在重复项不同的问题,因为这些错误消息至少注册了连接尝试附有密码。

编辑:在任何特定的顺序,我:尝试不同的用户检查连接字符串的状态立即db.init_app之前,创造了MySQL的不同实例,并试图连接到它,去除pymysql从连接字符串,并试图回用 pdb 跟踪它(没用,因为我认为我自己的唯一方法调用是 init_app())。我还搜索了互联网,没有发现任何人在尝试使用密码连接到数据库时收到此错误消息。我能想到的唯一剩下的可能性是在从 app.config 传递到 mysql(当我调用 db.init_app 时)时,某些东西正在更改我的字符串以删除密码。有任何想法吗?如果没有人,我只需要使用 Postgre 或其他什么......

mysql sqlalchemy flask flask-sqlalchemy pymysql

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

类型错误:尝试在会话中存储用户 ID 时,“ResultProxy”对象不支持索引

在我的Signedup路线中,我试图将用户 ID 存储在会话中并自动登录用户,但是当我尝试这样做时,我收到此错误:

TypeError: object of type 'ResultProxy' does not support indexing

而且,在我的signin路线中,我试图记住哪个用户已登录,但在这里出现错误:

TypeError: object of type 'ResultProxy' has no len()

signedup 路线 application.py

@app.route("/signedup",methods=["GET","POST"])
def signedup():
    if request.method=="POST":
        password = request.form.get("password")
        hash = pwd_context.encrypt(password)


        name = request.form.get("name")



        if not name:
            return "must provide username"
        elif not password:
            return "must provide password"



        registration = db.execute("INSERT INTO users (username,password) VALUES (:username,:password)",
                    {"username":name,"password":hash})

        if not registration:
            return "pick a different username"


        # Store their ID in session and …
Run Code Online (Sandbox Code Playgroud)

session flask python-3.x flask-sqlalchemy

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

烧瓶 wtforms-alchemy QuerySelectField ValueError:解压的值太多(预期为 2)

我正在尝试使用flask-wtfwtforms-alchemy 在此表单上创建注册表单我尝试创建selectfield,其值是从我的模型中查询的。但我总是收到这个错误:

 ValueError: too many values to unpack (expected 2)
Run Code Online (Sandbox Code Playgroud)

这是我的代码

from flask_wtf import FlaskForm
from wtforms_sqlalchemy.fields import QuerySelectField

def choose_domicile():
    return Domicile.query

class RegisterForm(FlaskForm):
    name = StringField('Name', validators=[DataRequired()])
    domicile = QuerySelectField(u'Domicile', query_factory=choose_domicile)


@app.route('/signup', methods=['GET', 'POST'])
    def signup():
        form = RegisterFormView()
        try:
            if form.validate_on_submit():
                new_user = Data(name=form.name.data, domicile=form.domicile.data)
                db.session.add(new_user)
                db.session.commit()
                return "Success"
        except:
            return "Failed"

        return render_template('signup.html', form=form)
Run Code Online (Sandbox Code Playgroud)

这是我的signup.html

{% block content %}
<div class="container">

  <form class="form-signin" method="POST" action="/signup">
    <h2 class="form-signin-heading">Sign Up</h2>
    {{ …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy flask flask-sqlalchemy flask-wtforms

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

基本 Flask SQLAlchemy 上下文问题

我已经阅读了许多其他关于将模型与主应用程序分离的帖子,但我无法让它仅与 app.py(我的实际应用程序)和 models.py(我的数据库模型)一起使用。

如果我执行以下操作,我会得到一个没有表的 app.db 文件:

from app import db
db.create_all() 
Run Code Online (Sandbox Code Playgroud)

如果我执行以下操作,我会收到 RuntimeError: No application found。在视图函数中工作或推送应用程序上下文。:

from app import db
db.create_all() 
Run Code Online (Sandbox Code Playgroud)

我还查看了上下文介绍页面,但无法弄清楚我将 def create_app(): 放在哪里,在我的情况下,它似乎都不起作用。

这是我的 app.py:

from flask import Flask, render_template, request
from flask_sqlalchemy import SQLAlchemy
from models import userTable

app = Flask(__name__)

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)

@app.route('/', methods=['GET', 'POST'])
def home():
    return "home"

if __name__ == '__main__':
    app.run(debug=True)
Run Code Online (Sandbox Code Playgroud)

这是我的models.py:

from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()

class userTable(db.Model):

    __tablename__ = "userTable" …
Run Code Online (Sandbox Code Playgroud)

python-3.x flask-sqlalchemy

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

SQLAlchemy LookupError:“DIVERSE”不在定义的枚举值中

我正在尝试借助 SQLAlchemy、Marshmallow 和 flask-restplus 使用单个表构建简单的 REST API。但它给出了 LookupError。

应用程序使用过程中出现以下错误:

    File "/home/ec2-user/.local/lib/python2.7/site-packages/sqlalchemy/dialects/mysql/enumerated.py", line 147, in _object_value_for_elem
return super(ENUM, self)._object_value_for_elem(elem)
File "/home/ec2-user/.local/lib/python2.7/site-packages/sqlalchemy/sql/sqltypes.py", line 1483, in _object_value_for_elem
'"%s" is not among the defined enum values' % elem
LookupError: "DIVERSE" is not among the defined enum values
96.57.148.186 - - [27/Feb/2019 09:16:23] "GET /employee/114425 HTTP/1.1" 500 -
Run Code Online (Sandbox Code Playgroud)

我正在尝试将 Enums 与 Marshmallow 和 SQLAlchemy 一起使用。我应该放弃 Enums 并简单地在数据库中使用 String 字段并仅对 Marshmallow 进行验证吗?

service.py文件是:

from flask import Flask, request, jsonify
from flask_sqlalchemy import SQLAlchemy
from flask_marshmallow …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy flask-sqlalchemy flask-restplus marshmallow

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

AttributeError: 'str' 对象没有属性 '_sa_instance_state'

我想评估链接到两个不同用户的值。我创建了一个不同的表来跟踪用户以前的体验和他们感兴趣的体验,并将它们与用户联系起来。我有一个匹配函数试图找到最相似的用户,但它给出了标题中列出的属性错误。

模型:

class User(UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(64), index=True, unique=True)
    prev = db.relationship('prevExp', backref='user', lazy='dynamic')
    interested = db.relationship('interestedExp', backref='user', 
                                 lazy='dynamic')
    matches = db.relationship('Match', backref='matchedTo', lazy='dynamic')

class prevExp(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    arts = db.Column(db.String(1))
    consulting = db.Column(db.String(1))
    dataScience = db.Column(db.String(1))
    education = db.Column(db.String(1))
    engineering = db.Column(db.String(1))
    finance = db.Column(db.String(1))
    government = db.Column(db.String(1))
    law = db.Column(db.String(1))
    management = db.Column(db.String(1))
    marketing = db.Column(db.String(1))
    medical = db.Column(db.String(1))
    technology = db.Column(db.String(1))
    expDescription = db.Column(db.String(400))
    userID = db.Column(db.Integer, db.ForeignKey('user.id'))

class interestedExp(db.Model): …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy flask flask-sqlalchemy

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

flask-migrate 按字母顺序进行迁移

使用flask-migrateand flask-script,我设置了我的项目,这样我只需要做

python manage.py db migrate
Run Code Online (Sandbox Code Playgroud)

在迁移文件夹中,我得到了诸如

0f46602752b7_.py
8fdf8259859b_.py
Run Code Online (Sandbox Code Playgroud)

无法保证第一次迁移先于第二次迁移。Django 通过在所有迁移前添加一个自动递增的数字来解决这个问题。我们可以告诉烧瓶迁移 / alembic 做同样的事情吗?

理想情况下,上面示例中的两个文件将是

001_8fdf8259859b_.py
002_0f46602752b7_.py
Run Code Online (Sandbox Code Playgroud)

python flask flask-sqlalchemy alembic

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

如何在 Flask sqlalchemy 中获取与外键链接的模型属性?

我在 Flask-Sqlalchemy 中创建了两个模型。这些模型是TicketsNamespace。两种模型都使用外键连接。我还创建了 marshmallow-sqlalchemyModelSchema定义以在 RESTful API 中使用。

class Ticket(db.Model):

    id = db.Column(db.Integer, primary_key=True)
    namespace = db.Column(
        db.Integer, db.ForeignKey('namespace.id'), nullable=False)
    title = db.Column(db.String)
    description = db.Column(db.Text)
    status = db.Column(db.String)
    severity = db.Column(db.String)


class TicketSchema(ma.ModelSchema):
    class Meta:
        model = Ticket
        include_fk = True
Run Code Online (Sandbox Code Playgroud)
class Namespace(db.Model):

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String)


class NamespaceSchema(ma.ModelSchema):
    class Meta:
        model = Namespace
Run Code Online (Sandbox Code Playgroud)

在我看来,我正在尝试按给定的namespace过滤所有票证。这是我的查询:

@app.route("/<string:name>", methods=["GET"])
def get_tickets_by_namespace(name):

    tickets_query = Ticket.query.join(Namespace).filter(Namespace.name == name)
    result = TicketSchema(many=True).dump(tickets_query).data

    return jsonify({"tickets": …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy flask flask-sqlalchemy marshmallow

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