我正在尝试从连接的继承表进行多态加载(我使用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?
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) 目前我正在使用带烧瓶的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)
有没有更好的方法来设计它?如果是这样,怎么样?请记住,我希望能够在一篇博文中插入多个图像和文本.
感谢你的帮助!
我有以下型号:
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)
我究竟做错了什么?
我在尝试将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) 我检查了文档,但它并没有多说什么,奇怪的是.
如果我打电话db.create_all(),是否需要对数据库是否已存在进行某种检查,以免被覆盖?
我正在使用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) 我正在制作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)
使用/定义数值类型列的正确方法是什么.
我建立了一个应用程序,该应用程序具有一个存储在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) 检查以下我一直在工作的代码。我遇到的问题是我的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) flask-sqlalchemy ×10
flask ×7
sqlalchemy ×5
python ×4
flask-admin ×1
jinja2 ×1
orm ×1
overriding ×1
postgresql ×1
sqlite ×1