小编Zer*_*ush的帖子

Sqlalchemy 将结果作为 KeyedTuple 而不是映射对象

假设您有一个简单的 SQLAlchemy 映射对象,如下所示:

class User(Base):
    __tablename__ = 'users'
    id = sqlalchemy.Column(sqlalchemy.Integer, autoincrement=True,primary_key=True)
    name = sqlalchemy.Column(sqlalchemy.Unicode(255), unique=True, nullable=False)
    email = sqlalchemy.Column(sqlalchemy.Unicode(255), nullable=False)
    address = sqlalchemy.Column(sqlalchemy.Unicode(255), nullable=False)
Run Code Online (Sandbox Code Playgroud)

创建用户:

sess.add(User(name=u'One', email=u'one@example.com', address='An address'))
sess.add(User(name=u'Two', email=u'two@example.com', address='An address'))
sess.add(User(name=u'Three', email=u'three@example.com', address='An address'))
Run Code Online (Sandbox Code Playgroud)

您可以使用以下命令查询这三个用户:

1.)

sess.query(User).all()
[<__main__.User object at 0x2fb9790>, <__main__.User object at 0x2fb9810>, <__main__.User object at 0x2fb9890>]
Run Code Online (Sandbox Code Playgroud)

它为您提供了一个 User 对象列表。

2.)

sess.query(User.id, User.name, User.email, User.address).all()
[(1, u'one@example.com', u'An address'), (2, u'two@example.com', u'An address'), (3, u'three@example.com', u'An address')]
Run Code Online (Sandbox Code Playgroud)

它为您提供了一个 KeyedTuple 对象列表,您可以在其中按属性名称引用字段,例如 sess.query(User.id, User.name, User.email, User.address).all()[0].name …

python sqlalchemy

4
推荐指数
1
解决办法
2671
查看次数

python re.findall奇怪的行为

>>> text =\
... """xyxyxy testmatch0
... xyxyxy testmatch1
... xyxyxy
... whyisthismatched1
... xyxyxy testmatch2
...  xyxyxy testmatch3
... xyxyxy
... whyisthismatched2
... """
>>> re.findall("^\s*xyxyxy\s+([a-z0-9]+).*$", text, re.MULTILINE)
[u'testmatch0', u'testmatch1', u'whyisthismatched1', u'testmatch2', u'testmatch3', u'whyisthismatched2']
Run Code Online (Sandbox Code Playgroud)

所以我的期望是不匹配包含"whyisthismatched"的行.

Python re文档说明了以下内容:

(点.)在默认模式下,它匹配除换行之外的任何字符.如果指定了DOTALL标志,则匹配包括换行符在内的任何字符.

我的问题是,如果这确实是预期的行为或错误.如果预计有人请解释为什么这些行匹配以及我应该如何修改我的模式以获得我期望的行为:

[u'testmatch0', u'testmatch1', u'testmatch2', u'testmatch3']
Run Code Online (Sandbox Code Playgroud)

python regex findall

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

标签 统计

python ×2

findall ×1

regex ×1

sqlalchemy ×1