2017-12-27 19 views
-1

私は別の(おそらく自前の)問題に遭遇しました。 Python3.6とsqlite 私はdbを作成し、テーブルや情報を追加するだけで十分です。私の問題は、私が願っている情報は逐次的ではないということです。しかし、私はそれをdb内でソートしたいので、処理が簡単です。以下は私のテーブルエントリを "datum"という名前のタイムスタンプでソート(ORDER)するコードです。 ubuntu上でsqlitemanの中から同じクエリを実行すると、それが動作し、私が望むように行を並べ替えます。しかし、私はPythonでそれを試しても動作しませんか?python sql ORDER date does not work

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 
# ============================ 

以下に説明するように、データがdbテーブルに格納される順序は完全に無関係です。データは、順序付けされ、データのみで作業するときに必要な順序で配置する必要があります。したがって、以下のコードスニペットは、そのデータを希望の順序に得るための一例です。

db_result = cur.fetchall() 
for row in db_result: 
    print(row) 
+2

「うまくいかない」とはどういう意味ですか?コードを見ると、クエリの結果を読み込もうとするものは何も表示されません。そのため、コードサンプルが不完全である可能性があります。 PythonでDB2.0 APIを思い出すと、次のようになります: 'cur.execute(query); cur.fetchall() '([fetchall](https://docs.python.org/2/library/sqlite3.html#sqlite3.Cursor.fetchall))。 [さらにカーソルの行を反復するだけです] – nerdwaller

+0

そのクエリを実行すると、自動的にデータベーステーブルの順序が自動的に変更されますか? –

+0

'cur.execute'に続いて' con.commit'が正確に何をすると思いますか? 'commit'はDBを変更する場合にのみ機能し、' SELECT'は何も変更しません。あなたが使っているコードを見ると、あなたの質問は実際には書かれているように多くの意味をなさない。 'SELECT'はデータを取得し、それが返す行を読み取らなければなりません。 –

答えて

1

SQLテーブルは順序付けされていません。

特定の順序でテーブルから行を取得する場合は、行を取得するすべてのクエリにORDER BY句を追加する必要があります。

+0

これは当初のことでしたが、dbのテーブル内の順序は無関係であることに気づいていませんでした。データベースからデータを取り出すときに結果を順序付ける必要があります。上記の私の修正された質問を見る –