我正在尝试从表中导出日期。我只想将原始创建的对象拉出来。
我正在运行以下查询:
return model.Session.query(cls).filter(cls.issue_id == issue_id).order_by(desc("created")).first()
Run Code Online (Sandbox Code Playgroud)
但它返回整个记录,我不知道如何导出创建的。
<IssueComment id=32 comment=ay user_id=578042a3-d879-4b32-96a9-10f9aabe152c issue_id=19 created=2018-07-17 20:17:09.653809 visibility=visible abuse_status=0>
Run Code Online (Sandbox Code Playgroud)
如果我尝试像这样调用在 cls.created 中创建的
return model.Session.query(cls.created).filter(cls.issue_id == issue_id).order_by(desc("created")).first()
Run Code Online (Sandbox Code Playgroud)
它导出一个奇怪的日期时间版本。我只想要原始版本
(datetime.datetime(2018, 7, 17, 20, 17, 9, 653809),)
Run Code Online (Sandbox Code Playgroud)
如何将创建的值导出为原始字符串?
SqlAlchemy 查询属性(而不是整个模型)返回KeyedTuples(或SQLAlchemy 1.4 中的Row对象),其行为类似于nametuple。与普通的 Python 元组一样,具有单个元素的元组由尾随逗号构造。这就是为什么您的结果(datetime.datetime(2018, 7, 17, 20, 17, 9, 653809),)显示日期时间对象后跟一个逗号。
>>> row = session.query(User.creation_timestamp).first()
>>> row
(datetime.datetime(2018, 4, 22, 9, 20, 56),) # <- trailing comma because it's a tuple
Run Code Online (Sandbox Code Playgroud)
可以通过索引访问值
>>> row[0]
datetime.datetime(2018, 4, 22, 9, 20, 56)
Run Code Online (Sandbox Code Playgroud)
或者按名字
>>> row.creation_timestamp
datetime.datetime(2018, 4, 22, 9, 20, 56)
Run Code Online (Sandbox Code Playgroud)
这些值是具有所有常用方法的 python 对象
>>> row.creation_timestamp.isoformat()
'2018-04-22T09:20:56'
>>> str(row.creation_timestamp)
'2018-04-22 09:20:56'
Run Code Online (Sandbox Code Playgroud)
教程说的有点令人困惑.first()
应用 1 的限制并以标量形式返回第一个结果
该示例显示返回的单个对象,如下所示:
>>> q = session.query(User).first()
>>> q
<User object at 0x7f97d8c6b590>
Run Code Online (Sandbox Code Playgroud)
而首先按属性调用查询会返回一个包含在元组中的值。如果您将元组视为结果集中的一行,这是有意义的。如果您调用.all()查询,您将获得一个元组(行)列表。如果您调用.limit(1).all()查询,您将获得一个包含单个元组的列表。因此,当您调用时,.first()您将从 中获得第一个结果.limit(1).all(),这是一个元组。
>>> row = session.query(User.creation_timestamp).all()
>>> row
[(datetime.datetime(2018, 4, 22, 9, 20, 56),), (datetime.datetime(2018, 4, 22, 9, 20, 56),), ...]
>>> row = session.query(User.creation_timestamp).limit(1).all()
>>> row
[(datetime.datetime(2018, 4, 22, 9, 20, 56),)]
>>> row = session.query(User.creation_timestamp).first()
>>> row
(datetime.datetime(2018, 4, 22, 9, 20, 56),)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1671 次 |
| 最近记录: |