【发布时间】:2017-12-27 03:44:13
【问题描述】:
我遇到了另一个(可能是自己造成的)问题。 Python3.6和sqlite 我在创建数据库和添加表和信息等方面已经足够了。我的问题是,我正在添加的信息不是连续的。但我希望它在数据库中排序,所以更容易处理。下面是我的代码,它应该按名为“datum”的时间戳对我的表条目进行排序(排序)。如果我在 ubuntu 上的 sqliteman 中运行相同的查询,它可以工作并按照我的意愿重新排序行。但是,如果我在 python 中尝试它不起作用?
con = lite.connect(db_name)
with con:
try:
cur = con.cursor()
strExec = "SELECT * FROM " + db_table_name + " ORDER BY datum ASC"
cur.execute(strExec)
con.commit()
except Error as e:
print(e)
cur.close()
con.close()
这是该表中的数据条目。有数百个条目,但我在这里只显示几个。
2017-12-23T00:00:00
2017-12-25T00:00:00
2017-12-24T00:00:00
2017-12-21T00:00:00
2017-12-24T00:00:00
2017-12-26T00:00:00
2017-12-12T00:00:00
知道我在这里缺少什么吗? 谢谢!
# ============================
# EDIT
# ============================
正如下面所回答的,数据驻留在数据库表中的顺序完全无关紧要。仅在处理数据时,需要对数据进行排序并按所需的任何顺序放置。因此,下面的代码 sn-p 是将数据按所需顺序排列的一个示例。
db_result = cur.fetchall()
for row in db_result:
print(row)
【问题讨论】:
-
您能详细说明“它不起作用”的含义吗?查看代码,我没有看到任何试图从查询中读取结果的东西——因此看起来代码示例可能不完整。根据我对 python 中 DB2.0 API 的回忆,您可能想要:
cur.execute(query); cur.fetchall()(fetchall)。 [更好的是只迭代游标中的行] -
您是否认为执行该查询会以某种方式自动重新排序您的数据库表本身?
-
您希望
cur.execute后跟con.commit能准确完成什么?commit仅在您修改数据库时有效,SELECT不会修改任何内容。当您查看正在使用的代码时,您的问题确实没有多大意义。SELECT检索数据,您必须读取它返回的行。 -
这就是我的问题所在。我尝试了一个 fetachall() 并将它们打印在屏幕上。一切都井井有条,所以我想我当时必须写它们,因为查询只对它们进行排序并“推送”它们以便我显示。这就说得通了。那么如何将它们写回数据库?创建新表,删除旧表,然后将新表重命名为旧名称?或者有没有更简单的方法?请解释!
-
尝试按某种顺序写回它们没有意义。
标签: sql python-3.x sqlite sql-order-by