标签: flask-sqlalchemy

sqlalchemy flask:AttributeError:'Session'对象在session.commit()上没有属性'_model_changes'

我已经看到了SessionMaker的很多问题,但是这个问题略有不同.不知道为什么,但sqlalchemy不会让我的会话对象提交.

在我的应用程序中,我有一些代码可以:

views.py

rec = session.query(Records).filter(Records.id==r).first()
n = rec.checkoutRecord(current_user.id)
session.add(n)
session.commit()
Run Code Online (Sandbox Code Playgroud)

models.py:

class Records(UserMixin, CRUDMixin, Base):
    __table__ = Table('main_records', Base.metadata, autoload=True)


    def checkoutRecord(self,uid):
        self.editing_uid = uid 
        self.date_out = datetime.now()
        return self

    def checkinRecord(self,uid):
        self.editing_uid = uid 
        self.date_in = datetime.now()
        return self
Run Code Online (Sandbox Code Playgroud)

该程序在commit()上解决,给出了上述异常.有趣的是,一些测试代码不导入烧瓶,但导入sqlalchemy工作正常,让我提交没有错误.

完整的堆栈跟踪:

Traceback (most recent call last):
  File "/Users/bhoward/Envs/py27/lib/python2.7/site-packages/flask/app.py", line 1475, in full_dispatch_request
    rv = self.dispatch_request()
  File "/Users/bhoward/Envs/py27/lib/python2.7/site-packages/flask/app.py", line 1461, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/Users/bhoward/Envs/py27/lib/python2.7/site-packages/flask_login.py", line 663, in decorated_view
    return func(*args, **kwargs)
  File "/Users/bhoward/projects/PeerCoUI/mk2/peercoui/app/records/views.py", line 65, in select_view …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy flask flask-sqlalchemy

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

带有create_app,SQLAlchemy和Celery的Flask

我真的很难为Flask,SQLAlchemy和Celery进行适当的设置.我已经广泛搜索并尝试了不同的方法,似乎没有什么工作.我错过了应用程序上下文或无法运行工作程序或存在其他一些问题.结构非常通用,因此我可以构建更大的应用程序.

我正在使用:Flask 0.10.1,SQLAlchemy 1.0,Celery 3.1.13,我目前的设置如下:

应用程序/ __ init__.py

#Empty
Run Code Online (Sandbox Code Playgroud)

应用程序/ config.py

import os
basedir = os.path.abspath(os.path.dirname(__file__))

class Config:

    @staticmethod
    def init_app(app):
        pass

class LocalConfig(Config):
    DEBUG = True
    SQLALCHEMY_DATABASE_URI = r"sqlite:///" + os.path.join(basedir, 
                                 "data-dev.sqlite")
    CELERY_BROKER_URL = 'amqp://guest:guest@localhost:5672//'


config = {
    "local": LocalConfig}
Run Code Online (Sandbox Code Playgroud)

应用程序/ exstensions.py

from flask.ext.sqlalchemy import SQLAlchemy
from celery import Celery

db = SQLAlchemy()
celery = Celery()
Run Code Online (Sandbox Code Playgroud)

应用程序/ factory.py

from extensions import db, celery
from flask import Flask
from flask import g
from config import config

def create_before_request(app):
    def before_request(): …
Run Code Online (Sandbox Code Playgroud)

celery flask flask-sqlalchemy

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

在多租户应用程序中动态设置Flask-SQLAlchemy数据库连接

我有一个" 多租户 " Flask Web应用程序,它与1个"主"MySQL数据库(用于查找客户端信息)和数十个"客户端"MySQL数据库(都具有相同的模式)连接.

我目前正在尝试使用SQLAlchemyFlask-SQLAlchemy扩展来与数据库连接,但我很难找到一种方法来允许我在我的应用中定义的模型动态地将上下文从一个客户端数据库切换到另一个客户端数据库,取决于客户.

Flask-SQLAlchemy站点上,一个简单的示例如下所示:

from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://username:password@Y.Y.Y.Y/db1'
db = SQLAlchemy(app)

class User(db.Model):
    # Etc.
Run Code Online (Sandbox Code Playgroud)

唯一的问题是,SQLALCHEMY_DATABASE_URI配置是静态完成的.我可能需要在mysql://username:password@Y.Y.Y.Y/db1mysql://username:password@Z.Z.Z.Z/db1(或任何其他任意MySQL URI)之间切换,具体取决于发出请求的客户端.

我发现了一些类似的问题(见下文),但是在使用Flask-SQLAlchemy扩展时,我还没有找到一种干净的方法.

使用sqlalchemy如何基于每个请求动态绑定到数据库引擎

Flask SQLAlchemy设置动态URI

我还看到了一些为处理分片数据库而提供的示例(也应该适用,因为数据库本质上是由客户端逻辑分片),但同样,Flask-SQLAlchemy没有特定的内容.

如果它有意义,我也可以直接使用SQLAlchemy,而不使用Flask-SQLAlchemy扩展.我是SQLAlchemy的新手 - 非常感谢任何帮助!

编辑:能够反映数据库中的表模式将是一个奖励.

python sqlalchemy multi-tenant flask flask-sqlalchemy

16
推荐指数
1
解决办法
5059
查看次数

Flask-Login - 如何获取会话ID

我正在使用烧瓶开发服务器环境与Flask,Gevent和web socket进行项目.我用过flask_login.这里

  1. 如何获得每个连接的唯一会话ID?
  2. 我想将数据存储SessionID在数据库中,并在客户端断开连接后将其删除.
  3. 如何获得总活动连接

    from flask_login import * 
    login_manager = LoginManager()
    login_manager.setup_app(app)
    
    @app.route("/", methods=["GET", "POST"]) 
    def login():
        login_user([username], remember):    
    
    @app.route("/logout") 
    @login_required 
    def logout(): 
        logout_user() 
    
    Run Code Online (Sandbox Code Playgroud)

flask python-2.7 flask-sqlalchemy flask-login flask-extensions

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

我在SQL Alchemy中的关系出了什么问题?

我正在使用SQLAlchemy和Flask为我的应用程序创建关系.我最近改写了关系,并且,无论我改变什么,我都会收到错误:

sqlalchemy.exc.NoForeignKeysError: Could not determine join condition between 
parent/child tables on relationship CurriculumVersion.enrollments - there are 
no foreign keys linking these tables.  Ensure that referencing columns are 
associated with a ForeignKey or ForeignKeyConstraint, or specify
a 'primaryjoin' expression.
Run Code Online (Sandbox Code Playgroud)

在我的模特:

class User(db.Model, AuthUser):
    id = db.Column(db.Integer, primary_key=True)
    tf_login = db.Column(db.String(255), unique=True, nullable=False) # can assume is an email
    password = db.Column(db.String(120), nullable=False)
    salt = db.Column(db.String(80))
    role = db.Column(db.String(80)) # for later when have different permission types
    zoho_contactid = db.Column(db.String(20), unique=True, nullable=False) …
Run Code Online (Sandbox Code Playgroud)

database sqlalchemy flask flask-sqlalchemy

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

使用非sql排名在SQL-alchemy中进行排序和分页

我有一个python算法,它返回给定用户的数据库行的排名顺序.此算法输出主键ID列表(这些键可以与post.id连接).它看起来像下面,除了可能有数千个匹配:

result_rank = [1286, 1956, 6759, 3485, 2309, 3409, 9023, 912, 13098, 23489, 19023, 1239]
Run Code Online (Sandbox Code Playgroud)

我想指示sqlalchemy选择这些行,并按照它们在列表中的排序顺序排序.问题是,我想对此进行分页

results = posts.query().filter(posts.id.in_(
    resultIds)).order_by(??? how can I order by post.id = result_rank ???).paginate(page_num, posts_per_page)
Run Code Online (Sandbox Code Playgroud)

我使用Postgresql作为数据库.

python pagination sqlalchemy flask flask-sqlalchemy

15
推荐指数
1
解决办法
909
查看次数

Flask-SQLAlchemy:在回滚无效事务之前无法重新连接

因此,我使用Amazon Web Services RDS运行MySQL服务器并使用Python的Flask框架运行应用程序服务器,并使用Flask-SQLAlchemy与RDS进行交互.

我的应用程序config.py

SQLALCHEMY_DATABASE_URI = '<RDS Host>'
SQLALCHEMY_POOL_RECYCLE = 60
Run Code Online (Sandbox Code Playgroud)

我的__ init __.py

from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy

application = Flask(__name__)
application.config.from_object('config')
db = SQLAlchemy(application)
Run Code Online (Sandbox Code Playgroud)

我有我的主要application.py

from flask import Flask
from application import db
import flask.ext.restless
from application.models import Person

application = Flask(__name__)
application.debug=True
db.init_app(application)

@application.route('/')
def index():
    return "Hello, World!"

manager = flask.ext.restless.APIManager(application, flask_sqlalchemy_db=db)
manager.create_api(Person, methods=['GET','POST', 'DELETE'])

if __name__ == '__main__':
    application.run(host='0.0.0.0')
Run Code Online (Sandbox Code Playgroud)

models.py

class Person(db.Model):
    __bind_key__= 'people'
    id = db.Column(db.Integer, primary_key=True)
    firstName = db.Column(db.String(80)) …
Run Code Online (Sandbox Code Playgroud)

python mysql amazon-web-services flask flask-sqlalchemy

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

SQLAlchemy对象已附加到会话

我正在尝试为应用程序运行服务器,但我在登录时遇到错误:

[!] Object '<User at 0x7f12bc185a90>' is already attached to session '2' (this is '3')
Run Code Online (Sandbox Code Playgroud)

我正在添加的会话似乎已经存在于数据库中.这是导致问题的代码片段:

@app.route('/login', methods=['POST'])
def login():
    u = User.query.filter(User.username == request.form["username"]).first()
    if not u or u.password != request.form["password"]:
        return error("E1")

    s = Session.get_by_user(u)
    if s is not None:
         db_session.delete(s)
         db_session.commit()

     print db_session.execute("SELECT * FROM sessions").fetchall()

     s = Session(u)
     db_session.add(s)
     db_session.commit()

     return jsonify(s.values)
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我在尝试添加任何内容之前从会话表中打印内容,它是空的!([])

还有什么可能导致这个?

这是"会话"实施:

class Session(Base):
__tablename__ = "sessions"
id = Column(Integer, primary_key=True)
user_id = Column(Integer, ForeignKey('users.id'), unique=True)
user = relationship(User)
key = Column(String(50), unique=True) …
Run Code Online (Sandbox Code Playgroud)

python session sqlalchemy python-2.7 flask-sqlalchemy

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

Sqlalchemy如何过滤包含Null和整数值的列

我有一个可以为空的列的表,其中包含两种类型的值Null(默认值)和整数:

class Node(db.Model):
    __tablename__ = "node"
    maintenance = db.Column(db.Integer, nullable=True)
Run Code Online (Sandbox Code Playgroud)

请求就像这样:

maintenance = 1
node_list = Node.query.filter(Node.maintenance != maintenance).all()
Run Code Online (Sandbox Code Playgroud)

我需要选择包含Null0值的所有单元格.

先感谢您!

python flask flask-sqlalchemy

14
推荐指数
1
解决办法
7457
查看次数

对JSON字段的更新不会持久保存到DB

我们有一个带有JSON字段的模型,用户标志插入其中.插入确实按预期工作,但是当删除某些标志时,它们会保留在字段中,并且更改不会持久保存到数据库.

我们的模型中有以下方法:

def del_flag(self, key):
    if self.user_flags is None or not key in self.user_flags:
        return False
    else:
        del self.user_flags[key]
        db.session.commit()        
        return True
Run Code Online (Sandbox Code Playgroud)

数据库是postgres,我们使用SQLalchemy JSON字段方言作为字段类型.有什么建议吗?

python postgresql json sqlalchemy flask-sqlalchemy

14
推荐指数
3
解决办法
4848
查看次数