在我正在处理的Pyramid应用程序中,我遇到以下情况:
class Widget(Base):
__tablename__ = 'widgets'
id = Column(Integer, primary_key=True)
name = Column(String(50))
sidebar = Column(mysql.TINYINT(2))
def __init__(self, name, sidebar):
self.name = name
self.sidebar = sidebar
class Dashboard(Base):
__tablename__ = 'dashboard'
user_id = Column(Integer, ForeignKey('users.id'), primary_key=True)
widget_id = Column(Integer, ForeignKey('widgets.id'), primary_key=True)
delta = Column(mysql.TINYINT)
widget = relationship('Widget')
def __init__(self, user_id, widget_id, delta):
self.user_id = user_id
self.widget_id = widget_id
self.delta = delta
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
login = Column(Unicode(255), unique=True)
password = Column(Unicode(60))
fullname = Column(Unicode(100)) …Run Code Online (Sandbox Code Playgroud) 我开始评估PyCharm 3专业版,因为我将参与几个Pyramid + SQLAlchemy项目.我真正喜欢的一件事是SQLAlchemy自动完成.
我会解释我的情景.
我用炼金术脚手架创建了一个新的初学者项目,我按照这里的说明http://docs.pylonsproject.org/projects/pyramid_tutorials/en/latest/pycharm/index.html.我还为我正在为此项目使用的解释器和虚拟环境安装了SQLAlchemy软件包.此外,当我为此代码创建一个新的pycharm项目时,IDE建议我安装金字塔,sqlalchemy和其他包.当然我接受了这个建议,让IDE安装所有这些软件包.
在models.py文件中,DBSession声明如下:
DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension()))
Run Code Online (Sandbox Code Playgroud)
在views.py文件中,DBSession以这种方式使用:
one = DBSession.query(MyModel).filter(MyModel.name == 'one').first()
Run Code Online (Sandbox Code Playgroud)
所以我开始玩IDE并做了类似的事情:输入DBSession.IDE只是给了我一些建议,其中没有列出'查询'功能.然后我尝试输入:DBSession.query(MyModel).并按下Ctrl + Space以尝试获取建议并显示"无建议"消息.
我真的想拥有SQLAlchemy建议的函数,我可以在我的DBSession变量上使用(比如filter,filter_by,first等).我会说这对我来说是强制性的:)
有什么我想念的吗?或者,PyCharm不支持这个?
我是Python和Pyramid的新手.在我用来了解更多有关Pyramid的测试应用程序中,我想查询数据库并根据sqlalchemy查询对象的结果创建字典,最后将字典发送到变色龙模板.
到目前为止,我有以下代码(工作正常),但我想知道是否有更好的方法来创建我的字典.
...
index = 0
clients = {}
q = self.request.params['q']
for client in DBSession.query(Client).filter(Client.name.like('%%%s%%' % q)).all():
clients[index] = { "id": client.id, "name": client.name }
index += 1
output = { "clients": clients }
return output
Run Code Online (Sandbox Code Playgroud)
在学习Python时,我发现了一种在for循环语句中创建列表的好方法,如下所示:
myvar = [user.name for user in users]
Run Code Online (Sandbox Code Playgroud)
那么,我遇到的另一个问题是:是否有像上面这样的"一行"方式来创建sqlalchemy查询对象的字典?
提前致谢.