小编Der*_*itz的帖子

SQL Alchemy ORM返回单列,如何避免常见的后期处理

我正在使用SQL Alchemy的ORM,当我返回单个列时,我发现我得到的结果如下:

[(result,), (result_2,)] # etc...
Run Code Online (Sandbox Code Playgroud)

有了这样的一套,我发现我必须经常这样做:

results = [r[0] for r in results] # So that I just have a list of result values
Run Code Online (Sandbox Code Playgroud)

这不是"坏",因为我的结果集通常很小,但如果不是这样,可能会增加很多开销.最重要的是我觉得它使源变得混乱,错过这一步是我遇到的一个非常常见的错误.

有没有办法避免这个额外的步骤?

一个相关的旁白:在ORM的这种行为似乎在这种情况下不方便,但在我的结果集是另一种情况,[(ID,值)]它最终是这样的:

[(result_1_id, result_1_val), (result_2_id, result_2_val)]
Run Code Online (Sandbox Code Playgroud)

然后我可以这样做:

results = dict(results) # so I have a map of id to value
Run Code Online (Sandbox Code Playgroud)

这个有一个优点,在返回结果后作为一个有用的步骤.

这真的是一个问题,还是我只是一个挑剔的事情,获得​​结果集后的后期处理对两种情况都有意义?我确信我们可以考虑其他一些常见的后处理操作,以使结果集在应用程序代码中更加可用.是否有全面的高性能和方便的解决方案,或者后处理是不可避免的,仅仅需要不同的应用程序使用?

当我的应用程序实际上可以由SQL炼金术的ORM返回的对象的优势似乎非常有帮助,但在情况下,我不能或不会,没有这么多.这一般只是ORM的常见问题吗?在这样的情况下,我最好不要使用ORM层吗?

我想我应该展示一下我正在谈论的实际orm查询的一个例子:

session.query(OrmObj.column_name).all()
Run Code Online (Sandbox Code Playgroud)

要么

session.query(OrmObj.id_column_name, OrmObj.value_column_name).all()
Run Code Online (Sandbox Code Playgroud)

当然,在真正的查询中通常会有一些过滤器等.

python orm sqlalchemy

68
推荐指数
4
解决办法
2万
查看次数

Python3中的__builtin__模块在哪里?为什么要重命名?

我很好奇该__builtin__模块以及它是如何使用的,但我在Python3中找不到它!为什么感动?

Python 2.7

>>> import __builtin__
>>>
Run Code Online (Sandbox Code Playgroud)

Python 3.2

>>> import __builtin__
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named __builtin__
>>>
Run Code Online (Sandbox Code Playgroud)

python

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

我什么时候应该使用Map而不是For Loop?

这与以下内容有关:(在Python代码中)

for i in object:
     doSomething(i)
Run Code Online (Sandbox Code Playgroud)

map(doSomething, object)
Run Code Online (Sandbox Code Playgroud)

两者都很容易理解,而且很短,但速度有差异吗?现在,如果doSomething有一个返回值,我们需要检查它是否会从map中返回一个列表,而在for循环中我们可以创建自己的列表或一次检查一个.

for i in object:
     returnValue = doSomething(i)
     doSomethingWithReturnValue(returnValue)
Run Code Online (Sandbox Code Playgroud)

returnValue = map(doSomething, object)
map(doSomethingWithReturnValue, returnValue)
Run Code Online (Sandbox Code Playgroud)

现在,我觉得两者有点分歧.两个doSomethingWithReturnValue函数可能会有所不同,因为如果我们在循环中检查它们,或者如果在最后一次检查它们会产生不同的结果.此外,似乎for循环总是有效,也许更慢,地图只能在某些情况下工作.当然,我们可以做出扭曲来使其中任何一种工作,但重点是避免这种类型的工作.

我正在寻找的是这样一种情况,即与性能,可读性,可维护性或实施速度方面的循环相比,映射功能真正发挥作用.如果答案确实没有太大差异,那么我想知道在实践中人们何时使用其中一个或者它是否真的完全随意并且根据您的机构根据编码标准设置.

谢谢!

python for-loop

44
推荐指数
3
解决办法
4万
查看次数

PyUnit tearDown和setUp vs __init__和__del__

是否有使用拆卸和安装与之间的差异__init____del__使用的PyUnit测试框架的时候?如果是这样,它究竟是什么,首选使用方法是什么?

python unit-testing

17
推荐指数
1
解决办法
3770
查看次数

是否有一个授权编程语言功能列表?

我正在寻找动态打字,静态打字,弱打字和强打字等内容.

以及OO功能,如多态性,继承,嵌套类,内部类,抽象类,纯虚函数.

此外,还有反射,静态绑定,动态绑定等.

但是,我并不是在寻找控制流,内置类型或语法糖等等.A [5] vs A.get(5).虽然,它不会受到伤害.

如果像这样的东西存在并将这些概念映射到特定语言,那将是非常棒的.

我知道许多这些功能已在维基百科上解释,但除非我已经知道这些功能是什么(我记得)或恰好找到相互关联的链接,否则无法快速访问.事实上,我唯一一次使用维基百科来做这样的事情,就好像我碰巧看到有人引用了一个想法,我需要查阅.

我的主要目标是让我有机会快速发现或了解我对这些概念的了解,这样的权威列表将非常有用.

如果这样的事情不存在,为什么?

是不是因为不同的编程语言决定以不同的方式命名这些东西但实际上做同样的事情呢?(即纯虚函数(C++)与抽象方法(Java))虽然其他人可能会命名相同的东西,但做一些略有不同的事情?(Java与C++中的Protected关键字)另一个原因可能是语言只是没有足够的共同特征来编译这样的列表而且学习一种语言并且它的功能一次更好?在这种情况下,当我学习语言时,我可能会编译自己的"功能列表"...

谢谢阅读!:)

language-features programming-languages

14
推荐指数
1
解决办法
2151
查看次数

什么是TDS协议版本8.0,为什么要使用它?

我已经使用带有8.0协议的FreeTDS一段时间来连接到MSSQL数据库,事情已经发挥得很好.但是,最近,事情开始变得不那么好了.我会遗漏细节.

所以我们决定我们需要了解更多,我对以下内容感到有些困惑:

FreeTDS是否支持Microsoft服务器?

是.Microsoft服务器通常不接受TDS 5.0连接.使用协议版本4.2,7.0或8.0之一.有关 详细信息,请参阅用户指南

用户指南

[No mention of 8.0 anywhere on the page.]
Run Code Online (Sandbox Code Playgroud)

那么,什么是TDS协议版本8.0以及我为什么要使用它?

sql-server freetds

12
推荐指数
1
解决办法
1万
查看次数

将HTTP请求映射到HTTP响应

如果我向同一服务器发出多个HTTP Get请求并获得每个HTTP 200 OK响应,我如何使用Wireshark告诉哪个请求映射到哪个响应?

目前它看起来像是一个http请求,并且很快收到下一个HTTP 200 OK响应,所以一切都按照正确的顺序进行.然而,我已经看到了相反的事情.例如,使用谷歌地图API v2我已经提出了几个位置信息请求,然后以任意顺序接收信息(非常类似于我请求它的顺序,但不一定完美.)

所以我的直觉是我不能假设我的回复将以特定的顺序被接收,即使它们可能在大多数时间都是有序的.所以我想知道如何从响应中确定这个顺序.

更新:澄清我需要什么.我只需要知道服务器已收到请求.看起来我需要通过查看序列号甚至ACKS来做到这一点.这种方法背后的原因是我基本上观察了一个Web应用程序并检查它是否正在发送信息并且正在接收信息.

更新:这与wireshark没有任何关系.我相信这让人很困惑,所以我把它从标题中删除了.它与TCP/IP协议之上的HTTP协议以及我们如何映射对请求的响应有关.

谢谢.

tcp http wireshark

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

如何查看CPython文档的更改/增强功能

"什么是新的"部分,留言板,社区等都很棒,但是当我阅读,熟悉并且可能永远不会再看(或者认为我不需要)时,会发生什么?重大更新.我担心,当创建一些新的富有洞察力的示例或更完整的文档时,我可能会错过一些有用的东西.也许,即使删除了不正确或令人困惑的文档(GASP!).

不要误解我,在谷歌搜索,Stack Overflow,PEP和相互关联的文档之间,我通常能够非常快速地获得尽可能多的细节.但是当我熟悉这种语言时,如果我经常使用它,我当然希望查看这些文档的增强功能.

是否有资源可用于查找此类信息?

python

7
推荐指数
1
解决办法
63
查看次数

关联代理SQLAlchemy

此源详细说明了如何使用关联代理创建具有ORM对象值的视图和对象.

但是,当我追加一个与数据库中现有对象匹配的值(并且所述值是唯一的或主键)时,它会创建一个冲突的对象,因此我无法提交.

所以在我的情况下这只是一个有用的视图,我需要使用ORM查询来检索要追加的对象.

这是我唯一的选择,还是我可以使用merge(如果它是主键而不是唯一约束,我可能只能这样做),或者设置构造函数,使它在数据库中使用现有对象(如果存在)而不是创建一个新对象?

例如来自文档:

user.keywords.append('cheese inspector')

# Is translated by the association proxy into the operation:

user.kw.append(Keyword('cheese inspector'))
Run Code Online (Sandbox Code Playgroud)

但是我想要翻译成更像的东西:(当然查询可能会失败).

keyword = session.query(Keyword).filter(Keyword.keyword == 'cheese inspector').one()
user.kw.append(keyword)
Run Code Online (Sandbox Code Playgroud)

或者理想情况下

user.kw.append(Keyword('cheese inspector'))
session.merge() # retrieves identical object from the database, or keeps new one
session.commit() # success!
Run Code Online (Sandbox Code Playgroud)

我想这可能不是一个好主意,但它可能在某些用例:)

sqlalchemy

7
推荐指数
1
解决办法
4549
查看次数

OpenGL和弃用新手

我已经开始使用PyOpenGL 3.0.1b在Python中使用OpenGL。

我查看了一些示例代码,然后开始运行它并对其进行修改等。一切都很好,直到我变得不太懂了。

http://pyopengl.sourceforge.net/documentation/manual-3.0/index.xhtml上,列出了OpenGL函数以及是否不建议使用它们。因此,我以为自己只需要找到一些不使用所有这些已弃用的废话的最新教程。

数小时后,再没有运气了!不推荐使用的示例代码之后不推荐使用的示例代码...我可以在哪里找到不推荐使用的教程?

python opengl pyopengl deprecated opengl-3

5
推荐指数
1
解决办法
1310
查看次数