标签: flask-sqlalchemy

SQLAlchemy的with_polymorphic忽略鉴别符

我正在尝试从连接的继承表进行多态加载(我使用Flask-Sqlalchemy)。

class Sip(db.Model):
    id = db.Column(db.Integer, primety_key=True)
    identity = db.Column(db.String(10))
    __mapper_args__ = {'polymorphic_identity': 'sip', 'polymorphic_on': identity}

class Device(Sip):
    id = db.Column(db.Integer, db.ForeignKey('sip.id', ondelete='CASCADE'), primary_key=True)
    __mapper_args__ = {'polymorphic_identity': 'dev'}

class Line(Sip):
    id = db.Column(db.Integer, db.ForeignKey('sip.id', ondelete='CASCADE'), primary_key=True)
    __mapper_args__ = {'polymorphic_identity': 'line'}
Run Code Online (Sandbox Code Playgroud)

我有一个Device对象和一个Line对象。当我尝试进行此类查询时:

Sip.query.with_polymorphic(Device).all()
Run Code Online (Sandbox Code Playgroud)

它返回所有对象

[<myapp.models.Device at 0x45cfc50>, <myapp.models.Line at 0x45cfa90>]
Run Code Online (Sandbox Code Playgroud)

当使用Line作为的参数时,情况相同with_polymorphic()。表“ sip”包含所有必需的身份,我可以对其进行检查:

>> Sip.query.with_polymorphic(Device).all()[0].identity
>> u'dev'
>> Sip.query.with_polymorphic(Device).all()[1].identity
>> u'line'
Run Code Online (Sandbox Code Playgroud)

我只是不知道发生了什么事。一切似乎都完全像doc示例。谢谢。

sqlalchemy flask-sqlalchemy

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

sqlalchemy - 反映带空格的表格和列

如何在列名(和表名)中包含空格的数据库中使用sqlalchemy?

db.auth_stuff.filter("db.auth_stuff.first name"=='Joe')显然无法工作.我不想在进行反射时手动定义所有内容,而是要lambda x: x.replace(' ','_')在现有表名之间添加一些内容,这些内容正在从数据库中读取,并在我的模型中使用.(创建一个通用函数来重命名所有不能与python一起使用的表名也可能很有用 - 保留字等)

有这么简单/干净的方法吗?

我想我需要定义自己的mapper类?

https://groups.google.com/forum/#!msg/sqlalchemy/pE1ZfBlq56w/ErPcn1YYSJgJ

或者使用某种__mapper_args__参数 - http://docs.sqlalchemy.org/en/rel_0_8/orm/mapper_config.html#naming-all-columns-with-a-prefix

理想情况下:

class NewBase(Base):
    __mapper_args__ = {
        'column_rename_function' : lambda x: x.replace(' ','_')
    }

class User(NewBase):
    __table__ = "user table"
    }
Run Code Online (Sandbox Code Playgroud)

python overriding sqlalchemy flask-sqlalchemy

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

如何在不使用Jinja2模板显示HTML代码的情况下提供博客摘录?

目前我正在使用带烧瓶的jinja2,并在数据库中使用ckeditor存储了博客文章.

理想情况下,数据应首先显示图像,然后跟随博客文章和其他一些外部链接到flikr的图像.

我知道我可以使用{{ post.body | safe}}单个帖子里面的内容来显示html作为真实图像而不是html文本.

但是,我怎么不显示HTML,但在有多个链接到不同prosts和节录没有像HTML出现在网页后只显示文本摘要.

在这种情况下"这篇帖子专门用于xyz"应该是摘录

database body= column

<img alt="15189057555_7670752b57_o" class="main" src="https://farm6.staticflickr.com/5584/15189057555_7670752b57_o.jpg" style="width:100%;max-width:1920px"><p>This post is dedicated to xyz</p>
Run Code Online (Sandbox Code Playgroud)

Jinja2的

'post'是一个帖子对象.我试图将摘录限制为100个字母,而不使用html标签和图像.

{{post.body[:100]}}... 将会呈现 <img alt="15189057555_7670752b57_o" class="main" src="https://farm6.staticflickr.com/5584/1518905755...

以下是循环浏览所有帖子的代码摘录,以提供指向单个博客页面的链接,时间戳以及博客内容的摘录.

<h1>Latest Posts</h1>
{% if posts %}
    {% for post in posts%}
      <div class="post">
        <h2><a href="post/{{post.postid}}">{{post.title}}</a></h2>
        <h6>{{post.timestamp.strftime('%a %y/%m/%d')}}</h6>
        <p>{{post.body[:100]}}...</p>
        <p>Posted By: {{post.author.nickname}}</p>
      </div>
    {% endfor %}
{% else %}
    <h4>No blog posts currently</h4>
{% endif%}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来设计它?如果是这样,怎么样?请记住,我希望能够在一篇博文中插入多个图像和文本.

感谢你的帮助!

jinja2 flask flask-sqlalchemy

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

Flask + SQLAlchemy邻接列表backref错误

我有以下型号:

class Category(db.Model):
    __tablename__ = 'categories'

    id = db.Column(db.Integer, primary_key=True)
    parent_id = db.Column(db.Integer, db.ForeignKey(id), nullable=True)
    level = db.Column(db.SmallInteger)
    name = db.Column(db.String(200))
    children = db.relationship('Category', backref=backref('parent', remote_side=id))

    def __repr__(self):
        return '<Category %r>' % (self.name)
Run Code Online (Sandbox Code Playgroud)

这似乎不起作用.我总是得到以下错误:

NameError: name 'backref' is not defined
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

python orm sqlalchemy flask flask-sqlalchemy

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

Flask + SQLAlchemy:类不可迭代

我在尝试将SQLAlchemy查询呈现到模板时遇到问题,我得到的错误是:

TypeError: 'Users' object is not iterable
Run Code Online (Sandbox Code Playgroud)

数据库是一个sqlite
我一直在关注youtube上的"发现真正的Python"教程,这是一个很大的帮助.我改变的唯一的事情是在他使用"BlogPosts"的教程中,我使用"用户"

我试图了解他是如何让用户迭代他的模板中的代码版本.

我的Models.py文件是这样的:

from app import db

class Users(db.Model):
    __tablename__="users"

    id= db.Column(db.Integer, primary_key=True)
    username=db.Column(db.String, nullable=False)
    password=db.Column(db.String, nullable=False)

    def __init__(self, username, password):
        self.username=username
        self.password=password

    def __repr__(self):
        return '<username{}'.format(self.username)
Run Code Online (Sandbox Code Playgroud)

和我的"app.py"文件.

from flask import Flask, render_template, redirect, url_for, request, session, flash
from functools import wraps
#import sqlite3
from flask.ext.sqlalchemy import SQLAlchemy


app= Flask(__name__)

app.secret_key="this is the secret key"
#app.database="users.db"

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

db=SQLAlchemy(app)

from models import *

def login_required(f):
    @wraps(f)
    def wrap(*args, **kwargs):
        if 'logged_in' …
Run Code Online (Sandbox Code Playgroud)

python sqlite sqlalchemy flask flask-sqlalchemy

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

db.create_all()是否检查数据库是否存在?

我检查了文档,但它并没有多说什么,奇怪的是.

如果我打电话db.create_all(),是否需要对数据库是否已存在进行某种检查,以免被覆盖?

flask flask-sqlalchemy

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

SQLAlchemy:指定用于模型的会话

我正在使用Flask-SQLAlchemy,我需要创建一个没有自动刷新操作的会话.但是,使用Flask-SQLAlchemy创建的默认范围会话db.session已启用自动刷新功能.

我正在为100k行进行批量更新,并且自动刷新会导致严重的性能问题.

我尝试使用以下命令创建一个关闭自动刷新的新会话:

from flask_sqlalchemy import SignallingSession
db_session = SignallingSession(db, autoflush=False)
Run Code Online (Sandbox Code Playgroud)

然后我尝试使用以下方法创建一个新行:

from flask_sqlalchemy import SQLAlchemy, BaseQuery

db = SQLAlchemy(app)

class Tool(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(1024), nullable=True)

add_tool = Tool()
add_tool.title = title

db_session.add(add_tool)
Run Code Online (Sandbox Code Playgroud)

但是,这样做会引发以下异常:

Traceback (most recent call last):
  File "app", line 182, in <module>
called for last item
    import_tools('x.json', 1)
  File "app", line 173, in import_tools
    x.add_to_database()
  File "app", line 126, in add_to_database
    title=metadata['title'], commit=True)
  File "app", line 150, in transfer
    self.db_session.add(import_tool)
  File …
Run Code Online (Sandbox Code Playgroud)

sqlalchemy flask flask-sqlalchemy

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

Flask-SQLAlchemy数字类型

我正在制作Flask-SqlAlchemy应用程序.在一个模型中,我想将地理代码数据存储为纬度/经度.

从阅读其他帖子,我应该使用数字而不是浮动.

类型Numeric的文档列出了几个可用的参数:

precision=None, asdecimal=False, decimal_return_scale=None
Run Code Online (Sandbox Code Playgroud)

所以我尝试添加一列作为

db.Column(db.Numeric, precision=8, asdecimal=False, decimal_return_scale=None) — as the equivalent of DECIMAL(10,8)
Run Code Online (Sandbox Code Playgroud)

哪个返回错误:

 "Unknown arguments passed to Column: " + repr(list(kwargs)))
Run Code Online (Sandbox Code Playgroud)

sqlalchemy.exc.ArgumentError:传递给Column的未知参数:['asdecimal','decimal_return_scale','precision']

如果我使用db.Column(db.Numeric),我可以创建表并写入它.

如果我在这里传递的语法错误,有人会向我解释:db.Column(db.Numeric,precision = 8,asdecimal = False,decimal_return_scale = None) - 相当于DECIMAL(10,8)

使用/定义数值类型列的正确方法是什么.

flask-sqlalchemy

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

flask-admin:如何只允许超级用户查看指定表的列?

我建立了一个应用程序,该应用程序具有一个存储在sqlite 中的名为Project的表,我希望在创建,编辑数据时仅允许超级用户查看批准列。

“类Project”中检索Project数据,并在“类ProjectView”中添加 了该数据:if current_user.has_role('superuser')

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_security import SQLAlchemyUserDatastore, current_user,UserMixin,        
     RoleMixin
from flask_admin.contrib import sqla

 # Create Flask application
 app = Flask(__name__)
 app.config.from_pyfile('config.py')
 db = SQLAlchemy(app)

 # Define models
 roles_users = db.Table(
     'roles_users',
     db.Column('user_id', db.Integer(), db.ForeignKey('user.id')),
     db.Column('role_id', db.Integer(), db.ForeignKey('role.id'))
 )

 class Role(db.Model, RoleMixin):
     id = db.Column(db.Integer(), primary_key=True)
     name = db.Column(db.String(80), unique=True)
     description = db.Column(db.String(255))

     def __str__(self):
         return self.name

 class …
Run Code Online (Sandbox Code Playgroud)

flask flask-sqlalchemy flask-admin

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

为什么我的烧瓶应用程序会给出此响应“类User(db.model):AttributeError:'SQLAlchemy'对象没有属性'model'”?

检查以下我一直在工作的代码。我遇到的问题是我的SQLAlchemy缺少模型:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy


app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://postgres:password@localhost/flask-movie'
db = SQLAlchemy(app)


class User(db.model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)

    def __init__(self, username, email):
        self.username = username
        self.email = email

    def __repr__(self):
        return '<User %r>' % self.username
Run Code Online (Sandbox Code Playgroud)

python postgresql flask flask-sqlalchemy

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