我刚开始使用programmming并使用sqlite3在pyscripter中编写了几行代码。
预先创建表“gather”。然后,我从“聚集”中选择某些行,将它们放入另一个表中。我尝试按特定列'日期'对此表进行排序。但它似乎没有用。它没有给我一个错误信息或类似的东西。它只是没有排序。如果我在sqlitemanager中尝试相同的命令(SELECT * FROM匹配ORDER BY日期),它在完全相同的表上工作正常!这里有什么问题?我用谷歌搜索了一段时间,但我没有找到解决方案。这可能是我想念的愚蠢......
正如我所说,我是一个全新的人。我猜你们都在流泪看着代码。所以,如果你有任何提示,我可以如何缩短代码或使其更快或更快,你非常欢迎:)(但除了上面提到的部分,一切正常。)
import sqlite3
connection = sqlite3.connect("gather.sqlite")
cursor1 = connection.cursor()
cursor1.execute('Drop table IF EXISTS matches')
cursor1.execute('CREATE TABLE matches(date TEXT, team1 TEXT, team2 TEXT)')
cursor1.execute('INSERT INTO matches (date, team1, team2) SELECT * FROM gather WHERE team1=? or team2=?, (a,a,))
cursor1.execute("SELECT * FROM matches ORDER BY date")
connection.commit()
答案 0 :(得分:0)
尝试在commit
之前移动SELECT *
(我不确定100%这是一个问题)然后您只需要获取查询结果:-)添加一行像在res = cursor1.fetchall()
execute
之后SELECT
。如果要像sqlitemanager一样显示它们,请添加
for hit in res:
print '|'.join(hit)
在底部。
修改:解决将排序顺序存储到表中的问题:
我认为你所寻找的东西就像聚集索引。 (实际上并没有对表中的值进行排序,而是接近;请参阅here)。
SQLIte没有这样的索引,但您可以通过实际排序表来模拟它们。您只能在插入数据时执行此操作一次。您需要一个SQL命令,如下所示:
INSERT INTO matches (date, team1, team2)
SELECT * FROM gather
WHERE team1=? or team2=?
ORDER BY date;
而不是您当前使用的那个。
见第4点here,这是我明白的地方。
答案 1 :(得分:0)
好的,我想我理解你的问题。首先:我不确定是否有必要提交调用。但是,如果是,您肯定希望它在您的select语句之前。 'connection.commit()'实质上是说,提交我刚刚对数据库所做的更改。
您的第二个问题是您正在执行选择查询,但实际上从未对查询结果做任何事情。
试试这个:
import sqlite3
connection = sqlite3.connect("gather.sqlite")
cursor1 = connection.cursor()
cursor1.execute('Drop table IF EXISTS matches')
cursor1.execute('CREATE TABLE matches(date TEXT, team1 TEXT, team2 TEXT)')
cursor1.execute('INSERT INTO matches (date, team1, team2) SELECT * FROM gather WHERE team1=? or team2=?, (a,a,))
connection.commit()
# directly iterate over the results of the query:
for row in cursor1.execute("SELECT * FROM matches ORDER BY date"):
print row
您正在执行查询,但从未实际检索过结果。使用sqlite3有两种方法:一种方法是我在上面展示的方式,你可以直接使用execute语句作为可迭代对象。
另一种方式如下:
import sqlite3
connection = sqlite3.connect("gather.sqlite")
cursor1 = connection.cursor()
cursor1.execute('Drop table IF EXISTS matches')
cursor1.execute('CREATE TABLE matches(date TEXT, team1 TEXT, team2 TEXT)')
cursor1.execute('INSERT INTO matches (date, team1, team2) SELECT * FROM gather WHERE team1=? or team2=?, (a,a,))
connection.commit()
cursor1.execute("SELECT * FROM matches ORDER BY date")
# fetch all means fetch all rows from the last query. here you put the rows
# into their own result object instead of directly iterating over them.
db_result = cursor1.fetchall()
for row in db_result:
print row