我在文档中找不到关于此的任何信息,但是如何获得在SQLAlchemy中创建的表的列表?
我使用类方法来创建表.
我打算从Django搬到Pylons,但后来我遇到了金字塔.
Pylons和Pyramid有什么区别?
我在PylonsBook中读到了一些文本,目前它涵盖了Pylons 0.9.7,并想知道它是否是Pylons和Pyramid的开始.
我正在构建一个webapp,需要在Django和Pyramid之间进行选择.我决定和金字塔一起去.
我知道Pyramid带有自己的身份验证/授权框架,看起来不错.但我没有在Pyramid的任何地方看到用户/组/权限的定义.在Django这些东西是免费的.
我正在使用SQLAlchemy,并想知道是否已经构建了类似的用户/组/权限,我可以导入.我宁愿不自己定义这些对象/映射和密码的哈希/腌制.
任何人都可以指出我可以使用的东西吗?或者我需要自己动手?
我正在金字塔项目中工作,我在SQLAlchemy中使用声明性语法表
"""models.py"""
class Projects(Base):
__tablename__ = 'projects'
__table_args__ = {'autoload': True}
Run Code Online (Sandbox Code Playgroud)
我通过使用获得结果
""""views.py"""
session = DBSession()
row_data = session.query(Projects).filter_by(id=1).one()
Run Code Online (Sandbox Code Playgroud)
如何从此结果中获取列名称.
PS:我无法使用此方法,因为我使用的是声明性语法.
我正在运行基于查询的其他ID的查询.我遇到的问题是,有时查询将找不到结果.而不是让整个程序崩溃,我如何检查结果是否为None?
这是我的查询:
sub_report_id = DBSession.query(TSubReport.ixSubReport).filter(and_(TSubReport.ixSection==sectionID[0], TSubReport.ixReport== reportID[0])).one()
Run Code Online (Sandbox Code Playgroud)
当代码执行并且没有找到结果时,我得到一个NoResultFound异常
NoResultFound: No row was found for one()
Run Code Online (Sandbox Code Playgroud)
如果没有结果,有没有办法跳过查询?
在SO上找到解决方案(之前找不到) 从sqlalchemy获取第一行
我在Pyramid应用程序中有这个表
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
.....
is_active = Column(Boolean, unique=False)
def __init__(self, name, raw_password):
is_active = True
Run Code Online (Sandbox Code Playgroud)
当我做我的测试时,它说is_active是没有.
def test_register_user(self):
user = User('user1', '1234')
self.sess.add(user)
self.sess.flush()
#print user
#self.assertTrue(user.is_active, True)
user_db_record = self.sess.query(User).filter_by(name=user.name).first()
self.assertEqual(user_db_record.is_active, True)
Run Code Online (Sandbox Code Playgroud)
从我的集成日志中,我看到在创建行时,is_active将其设置为None.为什么?
简化,我有以下类结构(在单个文件中):
Base = declarative_base()
class Item(Base):
__tablename__ = 'item'
id = Column(BigInteger, primary_key=True)
# ... skip other attrs ...
class Auction(Base):
__tablename__ = 'auction'
id = Column(BigInteger, primary_key=True)
# ... skipped ...
item_id = Column('item', BigInteger, ForeignKey('item.id'))
item = relationship('Item', backref='auctions')
Run Code Online (Sandbox Code Playgroud)
我从这里得到以下错误:
sqlalchemy.exc.InvalidRequestError
InvalidRequestError: When initializing mapper Mapper|Auction|auction, expression
'Item' failed to locate a name ("name 'Item' is not defined"). If this is a
class name, consider adding this relationship() to the Auction class after
both dependent classes have been …Run Code Online (Sandbox Code Playgroud) 假设我有一个表'shares'与以下列:
company price quantity
Microsoft 100 10
Google 99 5
Google 99 20
Google 101 15
Run Code Online (Sandbox Code Playgroud)
我想运行相当于这样的SQL语句:
select price,
sum(quantity) as num
from shares
where company='Google'
group by price;
Run Code Online (Sandbox Code Playgroud)
我最接近的是:
result = (dbsession.query(Shares.price, func.sum(Shares.quantity))
.filter(Shares.company == 'Google')
.group_by(Shares.price)
.all())
Run Code Online (Sandbox Code Playgroud)
我在sqlalchemy中设置'sum(quantity)as num'时遇到了麻烦.看来我需要使用别名(),但我无法通过查看文档来弄清楚如何.如果有人能告诉我该怎么做,我将不胜感激.
非常感谢!
我在用于UX设计的金字塔教程中看到了它.我无法理解这个装饰者的全部内容.
我看到它的用法的示例代码.
def __init__(self, request):
self.request = request
renderer = get_renderer("templates/global_layout.pt")
self.global_template = renderer.implementation().macros['layout']
@reify
def company_name(self):
return COMPANY
@reify
def site_menu(self):
new_menu = SITE_MENU[:]
url = self.request.url
for menu in new_menu:
if menu['title'] == 'Home':
menu['current'] = url.endswith('/')
else:
menu['current'] = url.endswith(menu['href'])
return new_menu
@view_config(renderer="templates/index.pt")
def index_view(self):
return {"page_title": "Home"}
@view_config(renderer="templates/about.pt", name="about.html")
def about_view(self):
return {"page_title": "About"}
Run Code Online (Sandbox Code Playgroud) 我们有一个用金字塔制作的网络应用程序,并通过gunicorn + nginx提供服务.它适用于8个工作线程/进程
我们需要工作,我们选择了apscheduler.这是我们如何推出它
from apscheduler.events import EVENT_JOB_EXECUTED, EVENT_JOB_ERROR
from apscheduler.scheduler import Scheduler
rerun_monitor = Scheduler()
rerun_monitor.start()
rerun_monitor.add_interval_job(job_to_be_run,\
seconds=JOB_INTERVAL)
Run Code Online (Sandbox Code Playgroud)
问题是gunicorn的所有工作进程都选择了调度程序.我们尝试实现文件锁,但它似乎不是一个足够好的解决方案.什么是最好的方法来确保在任何给定的时间只有一个工作进程选择预定的事件,没有其他线程选择到下一个JOB_INTERVAL?
如果我们决定稍后切换到apache2 + modwsgi,解决方案甚至需要使用mod_wsgi.它需要与作为服务员的单进程开发服务器一起工作.
我正面临OP所描述的相同问题,只需使用Django应用程序.我最有把握的是,如果原始问题,这个细节不会有太大变化.出于这个原因,为了获得更多的可见性,我还标记了这个问题django.
pyramid ×10
python ×9
sqlalchemy ×6
pylons ×2
apscheduler ×1
django ×1
gunicorn ×1
mysql ×1
wsgi ×1