标签: flask-sqlalchemy

SQLAlchemy 中的整数字段不会自动递增

I have a Flask-SQLAlchemy model with an Integer field that I'd like to autoincrement. It's not a primary key; it's a surrogate ID. The model looks like:

class StreetSegment(db.Model):
    id = db.Column(db.Integer, autoincrement=True)
    seg_id = db.Column(db.Integer, primary_key=True)
Run Code Online (Sandbox Code Playgroud)

When I create the table in my Postgres database, the id field is created as a plain integer. If I insert rows without specifying a value for id, it doesn't get populated. Is there some way I can force SQLAlchemy to use …

python postgresql sqlalchemy flask-sqlalchemy

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

使用 Python、flask 和 SQLAlchemy 如何在 HTML 页面上打印数据库查询的结果?

我有一个非常简单的查询(刚开始使用 SQLAlchemy),我知道它正在工作,因为它在终端中打印,但不在 HTML 页面上打印,这就是问题所在。

如下:

from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import *
from models import db, Candidate, User, Template
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

some_engine = create_engine('databse_url')
Session = sessionmaker(bind=some_engine)
session = Session()

@application.route("/", methods=['GET', 'POST'])
def index():
    res = session.query(Template).all()
    for temp in res:
            print temp.spark_id
    return render_template('index.html')
Run Code Online (Sandbox Code Playgroud)

在终端中,打印了 2 个“spark_id”,但在 HTML 页面上我什么也没得到。

在 index.html 页面中,我有:

% if res %}
    {% for temp in res %}

        <p>{{ temp.spark_id }}</p>
        <p>{{ temp.created_at }}</p>

    {% endfor %} …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy flask flask-sqlalchemy

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

删除 Flask-SQLAlchemy 表会引发 AttributeError

我试图在我的数据库中删除一个表,但出现以下错误:

AttributeError: 'SQLAlchemy' object has no attribute '_run_visitor'
Run Code Online (Sandbox Code Playgroud)

如何删除 Flask-SQLAlchemy 模型的表?

db = SQLAlchemy(app)

class DeleteTable(Resource):
    def get(self):
        CardsDB.__table__.drop(db)

class CardsDB(db.Model):
    __tablename__ = 'Cards'
    id = db.Column(db.Integer, primary_key=True)
    viewID = db.Column(db.Integer, db.ForeignKey('Views.id'))

api.add_resource(DeleteTable,'/user/delete/table')
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy flask-sqlalchemy

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

使用 Flask-SQLAlchemy 自动映射多个数据库

我有一个应用程序目前工作正常自动映射一个数据库,但我现在也需要访问另一个数据库。我试图在这里遵循 Flask-SQLAlchemy 文档:http : //flask-sqlalchemy.pocoo.org/2.1/binds/,但它似乎不适用于 automap_base。

我所做的唯一更改SQLALCHEMY_BINDS__bind_key__models.py中创建和添加。我得到的错误是

sqlalchemy.exc.ArgumentError: Mapper Mapper|Table2|table2 could not assemble any primary key columns for mapped table 'table2'
Run Code Online (Sandbox Code Playgroud)

但是,两个表都有一个主键列,如果我去掉SQLALCHEMY_BINDS,将 URI 设置为db2,并且只有table2models.py 中,一切正常。

我显然做错了什么,但我不知道它是什么。它看起来像瓶还在寻找table2db1。我认为我的问题是还需要对__init__.py进行一些更改,但我不知道那会是什么。

配置文件

SQLALCHEMY_DATABASE_URI = 'mysql://user@host/db1'
SQLALCHEMY_BINDS = {
    'otherDB':        'mysql://user@host/db2',
}
Run Code Online (Sandbox Code Playgroud)

__init__.py

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy.ext.automap import automap_base

app = Flask(__name__)
app.config.from_object('config')

db = SQLAlchemy(app)
db.Model = automap_base(db.Model) …
Run Code Online (Sandbox Code Playgroud)

sqlalchemy flask-sqlalchemy

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

通过 RDFLib-SQLAlchemy 将 RDF 数据加载到 PostgreSQL 表

我有一个 NT 格式的大型 RDF 数据集(Geonames 数据集:18GB)。我想通过使用将其加载到 PostgreSQL 关系表中rdflib_sqlalchemy.SQLAlchemy。我知道这是可行的(对存储在关系数据库中的 rdf 数据执行 sparql 查询)。但是,我不确定如何。你能给我举个例子吗?

我的下一个目标是使用 RDFLib 从 python 编写 SPARQL 查询。我知道该怎么做。在此先感谢您的帮助。

postgresql sqlalchemy sparql rdflib flask-sqlalchemy

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

使用 Flask-SQLAlchemy 和 Flask-Marshmallow 的聚合连接查询

我正在使用 Flask-SQLAlchemy 和 Flask-Marshmallow 针对 SQL Server 实例提取数据。我试图复制的查询看起来像这样

SELECT
    o.[ProductId],
    [AccountName] = a.[Name],
    [AccountDescription] = a.[Description],
    [TotalSize] = SUM(d.[Size])
FROM
    [OrderDetail] d
JOIN
    [Order] o
ON
    d.[OrderId] = o.[Id]
JOIN
    [Account] a
ON
    d.[AccountId] = a.[Id]
WHERE
    o.[Timestamp] <= @asOfDate
GROUP BY
    o.[ProductId],
    a.[Name],
    a.[Description]
Run Code Online (Sandbox Code Playgroud)

我很难将它翻译成 SQLAlchemy,特别是 Flask-SQLAlchemy,它似乎有一种稍微不同的做事方式。

这是我的尝试,位于我的路由功能内。该查询会执行,但针对服务器运行的 SQL 只是三个表的连接——它不执行聚合或分组依据。我认为它还选择了每一列,而不仅仅是我在with_entities.

"""views.py"""
@app.route('/product_sizes')
def get_product_sizes() -> Response:
    as_of_date_str = request.args.get('asOfDate')
    query = OrderDetail.query
                       .with_entities(Order.product_id.label('product_id'),
                                      Account.name.label('account_name'),
                                      Account.description.label('account_description'),
                                      func.sum(OrderDetail.size).label('total_size')) \
                       .group_by('product_id', 'account_name', 'account_description')

    if as_of_date_str:
        as_of_date = datetime.strptime(as_of_date_str, '%Y-%m-%d')
        query …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy flask flask-sqlalchemy marshmallow

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

SQLAlchemy 批量更新策略

我目前正在使用 SQLAlchemy(在 GAE 上,连接到 Google 的云 MySQL)编写一个 Web 应用程序(Flask)并且需要对表进行批量更新。简而言之,完成了许多计算,导致需要在 1000 个对象上更新单个值。目前我正在一个事务中完成这一切,但最终,刷新/提交需要很长时间。

该表有一个索引id,这一切都在单个事务中执行。所以我相信我已经避免了通常的错误,但仍然很慢。

INFO     2017-01-26 00:45:46,412 log.py:109] UPDATE wallet SET balance=%(balance)s WHERE wallet.id = %(wallet_id)s
2017-01-26 00:45:46,418 INFO sqlalchemy.engine.base.Engine ({'wallet_id': u'3c291a05-e2ed-11e6-9b55-19626d8c7624', 'balance': 1.8711760000000002}, {'wallet_id': u'3c352035-e2ed-11e6-a64c-19626d8c7624', 'balance': 1.5875759999999999}, {'wallet_id': u'3c52c047-e2ed-11e6-a903-19626d8c7624', 'balance': 1.441656}
Run Code Online (Sandbox Code Playgroud)

根据我的理解,实际上无法在 SQL 中进行批量更新,并且上面的语句最终将多个 UPDATE 语句发送到服务器。

我试过使用,Session.bulk_update_mappings()但这似乎并没有真正做任何事情:( 不知道为什么,但更新从未真正发生过。我看不到任何实际使用这种方法的例子(包括在性能套件中)所以没有确定它是否打算使用。

我见过讨论过的一种技术是在另一个表中进行批量插入,然后进行 UPDATE JOIN。我已经给它做了一个测试,如下所示,它似乎要快得多。

wallets = db_session.query(Wallet).all()
ledgers = [ Ledger(id=w.id, amount=w._balance) for w in wallets ]
db_session.bulk_save_objects(ledgers)
db_session.execute('UPDATE wallet w JOIN ledger l on w.id = l.id SET …
Run Code Online (Sandbox Code Playgroud)

mysql performance orm sqlalchemy flask-sqlalchemy

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

云 9 CS50 上的 pylint 错误消息

我正在学习 CS50 课程,但在使用 application.py 时遇到问题。我在 Cloud 9 代码编辑器 (Ace) 中收到以下警告:

instance of SQLAlchemy has no column member
instance of SQLAlchemy has no integer member
instance of SQLAlchemy has no text member
instance of scoped_session has no add member
instance of scoped_session has no commit member
Class Registrants has no query member
Run Code Online (Sandbox Code Playgroud)

我在主目录中创建了一个文件 .pylintrc 并添加了以下两行:

ignored-modules=flask_sqlalchemy
ignored-classes=SQLObject,Registrant
Run Code Online (Sandbox Code Playgroud)

这消除了大部分错误,但我留下了:

instance of scoped_session has no add member
instance of scoped_session has no commit member
Run Code Online (Sandbox Code Playgroud)

这是导致问题的代码:

from flask import Flask, render_template, redirect, request, url_for …
Run Code Online (Sandbox Code Playgroud)

pylint flask python-3.x flask-sqlalchemy

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

Flask-SQLAlchemy 一对多关系找不到名称

我有一个带有 Flask-SQLAlchemy 的 Flask 应用程序。我正在尝试建立从用户到旅行的一对多关系。我看到了,如果我使用 SQLAlchemy 的 declarative_base 它可以工作,但是当我使用 Flask-SQLAlchemy 中的 db.Model 时它不起作用。

我收到以下错误:

sqlalchemy.exc.InvalidRequestError: When initializing mapper Mapper|User|User, expression 'Trip' failed to locate a name ("name 'Trip' is not defined"). If this is a class name, consider adding this relationship() to the <class 'models.user.User'> class after both dependent classes have been defined.
Run Code Online (Sandbox Code Playgroud)

以下是模型:

数据库.py

from flask import abort 
from flask_sqlalchemy import SQLAlchemy 
from sqlalchemy import exc

db = SQLAlchemy()


class Mixin(db.Model):
    __abstract__ = True
    id = db.Column(db.Integer, primary_key=True)
    date …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy flask flask-sqlalchemy

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

如何根据同一模型的其他两列设置sqlalchemy中一列的值?

我正在构建一个 Web 应用程序。我有以下型号。

class Staff(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    store_id = db.Column(db.Integer, db.ForeignKey('store.id'))
    first_name = db.Column(db.String(64))
    last_name = db.Column(db.String(64))
    username = db.Column(db.String(64))
    cell_phone = db.Column(db.Integer)
    email = db.Column(db.String(64))
    position = db.Column(db.String(64))
    # add average salary value based on payroll
Run Code Online (Sandbox Code Playgroud)

我想要的usernamefirst_name+last_name与用户键入在形式他的姓和名。

我知道如何使用@db.event.listens_for(Staff, "after_insert")等并像这样更新它。但是有没有办法在模型中定义一些东西,让它在没有触发器的情况下自动完成?`

python sqlalchemy flask-sqlalchemy

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