- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在构建 Pyramid 应用程序(SQLAlchemy 作为 ORM)时,我遇到了一个我似乎无法弄清楚的问题。
使用 SQLAlchemy 脚手架构建的项目,因此所有设置都是正确的。
当我在 View 中使用 DBSession 变量时,它可以正常工作。
示例:
from pabsite.models import DBSession
....
@view_config(route_name='admin_class', renderer='admin_class.mako')
def admin_class(request):
db_class = eval(request.matchdict['db_class'])
class_objects = DBSession.query(db_class).all()
return {'db_class':db_class, 'class_objects':class_objects, "db_class_name":request.matchdict['db_class']}
现在,当我尝试创建一个新的非 SQLAlchemy 类时,问题就出现了:
from pabsite.models import DBSession
.....
class AdminPost(colander.MappingSchema):
tester = DBSession.query(Post).all()
title = colander.SchemaNode(colander.String(),
validator=colander.Length(max=100),
widget = get_inputbox(),
description='Tytuł')
当我想运行应用程序时,我遇到了:
File "/media/stuff/Projects/current/web/PabsiteProject/pabsite/pabsite/__init__.py", line 1, in <module>
from pabsite.admin.views import admin_routes
File "/media/stuff/Projects/current/web/PabsiteProject/pabsite/pabsite/admin/views.py", line 9, in <module>
from models import getAdminPost
File "/media/stuff/Projects/current/web/PabsiteProject/pabsite/pabsite/admin/models.py", line 13, in <module>
class AdminPost(colander.MappingSchema, Base):
File "/media/stuff/Projects/current/web/PabsiteProject/pabsite/pabsite/admin/models.py", line 14, in AdminPost
tester = DBSession.query(Post).all()
.....
sqlalchemy.exc.UnboundExecutionError: Could not locate a bind configured on mapper Mapper|Post|posts, SQL expression or this Session
这一定是一些微不足道的事情,但我似乎无法让该类知道 DBSession 绑定(bind)。有人可以给我指出一些解决方案/文档吗?
编辑:抱歉,我发布了一个愚蠢的例子,我在尝试不同的事情时最终得到了这个例子。
正确的例子:
class AdminPost(colander.MappingSchema):
title = colander.SchemaNode(colander.String(),
validator=colander.Length(max=10),
widget = get_inputbox(),
description='Tytuł')
category = colander.SchemaNode(colander.String(),
widget = get_select_widget(),
description='Kategoria')
def getForm(self):
schema = self
admin_form = Form(schema, buttons=('submit',))
return admin_form
现在我将选择小部件(我希望它们在其他类中重用)定义为:
def get_select_widget():
get_categories = DBSession.query(Category).all()
select_widget = deform.widget.SelectWidget(values=get_categories())
这里 get_categories 抛出了我之前提到的错误。这可能是我对使用Python的误解,但我不知道如何让DBSession了解应用程序引擎配置。
编辑2Category 是一个数据库模型,而 AdminPost 类服务器作为一个变形模型。这是定义
class Category(Base):
__tablename__ = 'categories'
id = Column(Integer, primary_key=True)
name = Column(String(150))
slug = Column(String(150))
name_en = Column(String(150))
slug_en = Column(String(150))
def __init__(self,name=''):
self.name = name
def __repr__(self):
return self.name
他们怎么能共享同一个 parent ,因为他们的目的不同。
编辑 4
DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension()))
Base = declarative_base()
它们被定义为 Pyramid 脚手架 - 在应用程序根目录的 models.py 中。这就是我从中导入它们的地方,它们确实有效,但在 View 中,而不是在我在变形上准备的类(class)中。
最佳答案
你的问题在于Python的工作方式以及你想要在这里实现的目标。我假设您希望 AdminPost.tester
始终包含 Post
表中所有项目的最新列表?
让我们一一解决这些问题。一、声明
class AdminPost(colander.MappingSchema):
tester = DBSession.query(Post).all()
将在导入时执行。看看这个:
print "Before import"
import some_module
print "After import"
some_module.SomeClass()
让 some_module
看起来像这样:
class A(object):
print "Inside A"
def __init__(self):
print "New instance of A"
这是您将得到的输出:
Before import
Inside A
After import
New instance of A
原因在于 python 解析代码的方式:它执行它找到的每个语句,但在遇到 def
时,它不会评估任何缩进的内容。 (这是一个粗略描述!)
既然您已经看到了这一点,您就知道您的查询在您启动程序时(很可能)被执行。此时,sqlalchemy还没有找到它的所有表并为其进行配置。此外,您很可能还没有绑定(bind)引擎。
但你的问题实际上与 SQLAlchemy 无关。对于如何定义类的每个实例应作为默认值的值是一个常见的误解。在 Python 中,您可以在 __init__
中执行此操作:
class AdminPost(colander.MappingSchema):
def __init__(self, *args, **kwargs):
tester = DBSession.query(Post).all()
colander.MappingSchema.__init__(self, *args, **kwargs)
最后一行确保随后调用默认构造函数。
关于python - Pyramid 、sqlalchemy dbsession,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19908639/
Pyramid 项目中有一个 development.ini 或 production.ini 。我将自己的配置数据添加到 ini 文件如: [thrift] host = 0.0.0.0 port
我想注册一个请求处理程序,但不想使用扫描方法。 为什么我需要调用两个方法(add_route 和 add_view)而不是一个? from wsgiref.simple_server import m
请问我错过了什么。当我想提供已下载到磁盘上的视频文件时,我不断在浏览器中收到内部服务器错误。这是我的代码: View 函数 @view_config(name='download_video') de
请问我错过了什么。当我想提供已下载到磁盘上的视频文件时,我不断在浏览器中收到内部服务器错误。这是我的代码: View 函数 @view_config(name='download_video') de
我目前正在学习如何使用 Python Pyramid Web 框架,并且发现文档非常出色。 然而,在区分“模型”(即在 SQLAlchemy 声明性系统下定义的类)的概念和“资源”(即定义访问控制的方
我一直在尝试让 Pyramid 在谷歌应用程序引擎中运行,但没有成功。我尝试按照说明 here 进行操作但它似乎已经过时了,因为 gae 不再有 appcfg.py 了。我按照应用程序引擎文档中的 F
大多数可用教程都展示了如何使用上游 HTTP 服务器(如 NGINX)设置 uWSGI。但是 uWSGI 本身就可以完美地充当路由器/代理/负载均衡器 - 请参阅 this对于我的项目,我现在不想设置
我正在尝试使用 Pyramid 自省(introspection)接口(interface)从可调用 View 中获取给定资源类型的所有 View 的列表。我可以使用以下方法获取一组已添加的 View
我正在使用 Pyramid 来创建网络应用程序。然后我使用 Pyramid 烧杯将烧杯连接到 Pyramid 的 session 管理系统。 有两个值会影响用户 session 的持续时间。 sess
背景 我对 unicode 和 Python 真是一团糟。这似乎是一个普遍的焦虑,我尝试过使用其他解决方案,但我就是无法解决这个问题。 设置 MySQL 数据库设置 collation_datab
模型 - View - PHP 框架(如 Kohana)的 Controller 的 Pyramid/Python 等价物是什么? In Pyramid "Model" is .... and it
我遵循了 http://docs.pylonsproject.org/docs/pyramid/en/latest/tutorials/wiki/index.html 上的教程 我知道,当我添加或更改
我使用 yapps 为 Pyramid 内的 LaTex 语言生成解析器(例如将 \begin{itemize} 之类的内容翻译成相应的 -Tags)。一个命令(即 \ref{SOMEID} )应该
我正在 Pyramid 框架之上使用 python 制作 webapps。 在我利用 Mechanize 进行一些简单网页抓取的函数之一中,当我将其作为独立的 Python 脚本运行并通过 Pyram
var z = []; for(var i = 1; i len) z.push("a".repeat(len-i%len)) console.log(z.join("\n")); 关于jav
我正在开发 Python Pyramid我需要使用rest api,在其中一个请求中,我需要处理一个excel,对于它的每一行,我都会获取GPS坐标并进行大量验证,这意味着这个唯一的请求可能需要大约1
这是我的 base.html: {% block head %} {% endblock %} {% block body
我一直在尝试使用 Pyramid 框架制作带有复选框和单选按钮的表单,但我不知道如何正确执行。 我正在使用pyramid_simpleform。到目前为止,我已经能够使用 for 循环将复选框放在表单
我按照 Pyramid 教程进行操作,一切正常。然后我为 Pyramid 安装了 jinja2,并将必要的代码行添加到我的 development.ini 文件中。按预期在指定位置找到了我的模板。它们
我的应用程序从用户接收一个或多个 URL(通常为 3-4 个 URL),从这些 URL 中抓取某些数据并将这些数据写入数据库。但是,因为抓取这些数据需要一点时间,所以我正在考虑在单独的线程中运行每个抓
我是一名优秀的程序员,十分优秀!