私は、Python 2.6.4でsqlite3モジュールを使用してSQLiteデータベースにdatetimeを格納しています。 sqliteは自動的に日付を文字列に変換するので、挿入するのは非常に簡単です。問題は、それを読むときに文字列として戻ってくるのですが、元のdatetimeオブジェクトを再構築する必要があります。これはどうすればいいですか?sqliteからdatetimeをPythonの文字列の代わりにdatetimeとして読み込むには?
答えて
あなたは、タイムスタンプの種類を使用して列を宣言する場合は、クローバーにいる:
>>> db = sqlite3.connect(':memory:', detect_types=sqlite3.PARSE_DECLTYPES)
>>> c = db.cursor()
>>> c.execute('create table foo (bar integer, baz timestamp)')
<sqlite3.Cursor object at 0x40fc50>
>>> c.execute('insert into foo values(?, ?)', (23, datetime.datetime.now()))
<sqlite3.Cursor object at 0x40fc50>
>>> c.execute('select * from foo')
<sqlite3.Cursor object at 0x40fc50>
>>> c.fetchall()
[(23, datetime.datetime(2009, 12, 1, 19, 31, 1, 40113))]
を参照してください? int(列宣言された整数の場合)とdatetime(列が宣言されたタイムスタンプの場合)の両方が、intact型のラウンドトリップで存続します。
sqlite3がこれを行うことができ、それはdocumentedでもありますが、見逃したり誤解したりするのはかなり簡単です。私がしなければならなかった何
は次のとおりです。
- は、例えば、.connect()の呼び出しでsqlite3.PARSE_COLNAMESオプションを渡します。
conn = sqlite3.connect(dbFilePath, detect_types=sqlite3.PARSE_DECLTYPES|sqlite3.PARSE_COLNAMES)
私は、クエリに望んでいたタイプを置く - と日時のために、それは実際に "日時" ではないのですが、 "タイムスタンプ":
sql = 'SELECT jobid, startedTime as "[timestamp]" FROM job' cursor = conn.cursor() try: cursor.execute(sql) return cursor.fetchall() finally: cursor.close()
私が "datetime"を渡すと、それは暗黙のうちに無視され、私はまだ文字列を返します。引用符を省略した場合も同じです。
フム、あなたには、いくつかのより多くのコードを表示してくださいだろう?私はこれを動作させることができません... – unutbu
それは間違いなく '' [timestamp] ''であり、 '[timestamp]'は暗黙のうちに無視され、 '.fetchone'も型を変換しません。どのような奇妙な図書館。 –
注:のpython3では、私のような何かにSQLを変更する必要がありました:
SELECT jobid, startedTime as "st [timestamp]" FROM job
(私は明示的に列に名前を付ける必要がありました。)
- 1. データベースからSQLiteのDateTime値を読み込み、それをC#の文字列変数に割り当てる
- 2. DataSetの代わりにDateTimeの代わりにデフォルトの文字列
- 3. datetimeオブジェクトの代わりに文字列を返すSQLAlchemy
- 4. 文字列をdatetimeに変換するときに、datetimeの代わりにNAを取得する
- 5. C#でExcelからSQLにシートを読み込むときに、DateTime列の時間が失われる
- 6. Python関数はdatetimeオブジェクトの代わりにuncodeの文字列を返します
- 7. ファイルの代わりに文字列に書き込むXmlWriter
- 8. 文字列ではなく文字列の代わりにDateTimeを返す方法
- 9. androidの文字列から文字を読み込む方法
- 10. 文字をC++の文字列から読み込む
- 11. C - ファイルからテキスト/文章を文字列に読み込む
- 12. ファイルを文字列に読み込む
- 13. 文字列配列からXMLをVBAに読み込む
- 14. BigQueryのdatetimeフィールドにDateTime文字列を挿入します
- 15. DateTime文字列を含むクエリのConcat文字列
- 16. Pythonは、ファイルから文字列を読み込み、列名に分割し、
- 17. XMLからの/からのDateTimeの読み取り/書き込み
- 18. djangoのPythonでdatetimeを文字列に変換するには
- 19. 文字列からDatetimeを取得
- 20. datetimeとしてSQL Serverの区切り文字なしでdatetime文字列を変換する方法?
- 21. Pythonの文字列からのdatetime、最適推測文字列形式
- 22. 文字列を読み込むよりも速く読み込みますか?
- 23. パンダが配列の代わりにcsvに文字列を書き込む
- 24. Backbone.D3ViewをjQueryバックボーンの代わりに読み込む方法
- 25. テキストファイルから文字を読み込む
- 26. mysql now()の代わりにdatetimeを使用しますか?
- 27. SQLから読み込むと文字列リストに値が入りません
- 28. コンソールから整数と文字列を読み込む
- 29. ロードXML - 代わりに、URLからXMLを読み込むのiPhone
- 30. Pythonの変数としてテキストファイルから文字列を読む
ありがとう、アレックス、それは動作します!私はこれに驚いています。なぜなら、http://www.sqlite.org/datatype3.htmlのTIMESTAMP型についての言及が全くないからです。 – EMP
@Evgeny、http://docs.python.org/library/sqlite3を参照してください。 .html#default-adaptors-and-converters - sqlite.orgでは実際にはPython層に実装されているので、sqlite.orgには書かれていません。 –
私は、fetchallがdatetimeを返すようにするconnect関数の__detect_types = sqlite3.PARSE_DECLTYPES__パラメータを調べています。これを省略すると、ユニコードオブジェクトが作成されます。 – Ponytech