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 …
我有一个非常简单的查询(刚开始使用 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) 我试图在我的数据库中删除一个表,但出现以下错误:
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) 我有一个应用程序目前工作正常自动映射一个数据库,但我现在也需要访问另一个数据库。我试图在这里遵循 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,并且只有table2在models.py 中,一切正常。
我显然做错了什么,但我不知道它是什么。它看起来像瓶还在寻找table2在db1。我认为我的问题是还需要对__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) 我有一个 NT 格式的大型 RDF 数据集(Geonames 数据集:18GB)。我想通过使用将其加载到 PostgreSQL 关系表中rdflib_sqlalchemy.SQLAlchemy。我知道这是可行的(对存储在关系数据库中的 rdf 数据执行 sparql 查询)。但是,我不确定如何。你能给我举个例子吗?
我的下一个目标是使用 RDFLib 从 python 编写 SPARQL 查询。我知道该怎么做。在此先感谢您的帮助。
我正在使用 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) 我目前正在使用 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) 我正在学习 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) 我有一个带有 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) 我正在构建一个 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)
我想要的username是first_name+last_name与用户键入只在形式他的姓和名。
我知道如何使用@db.event.listens_for(Staff, "after_insert")等并像这样更新它。但是有没有办法在模型中定义一些东西,让它在没有触发器的情况下自动完成?`
flask-sqlalchemy ×10
sqlalchemy ×9
python ×6
flask ×4
postgresql ×2
marshmallow ×1
mysql ×1
orm ×1
performance ×1
pylint ×1
python-3.x ×1
rdflib ×1
sparql ×1