DATE型のOracle列にPythonの日時を挿入する

Pythonのdatetimeオブジェクトをdate型のORACLEカラムに格納しようとしています。

これまでのところ、私は使用しました、

rpt_time = time.strftime('%Y-%m-%d %H:%M:%s') or
rpt_time = str(datetime.datetime.now())

しかし、すべてがORA-01843を出しています

私は本当にORACLE日付型のpython datetimeオブジェクトを挿入する方法を混同しています

1
完全なPythonコードを投稿してください。
追加された 著者 Frank Schmitt,

7 答え

cx_Oracleはクラス datetime.datetime のオブジェクトの受け渡しをサポートしています。このため、このクラスのオブジェクトがすでにあるとき(たとえば datetime.datetime.now()を呼び出すとき)、それをフォーマットして文字列として渡すのではなく、直接それを渡すべきです。これにより、日付や時刻の形式が間違っているために発生するすべてのエラーを防ぐことができます。

例:

cursor.execute("INSERT INTO SomeTable VALUES(:now)", {'now': datetime.datetime.now()})

秒の小数部の切り捨てを防ぐには、追加の手順を実行する必要があることに注意してください。詳細については、 『Oracle + Pythonを使いこなすために』第2回:作業PrzemysławPiotrowskiによるTimes and Dates の記事。

5
追加された
トンバディをありがとう!あなたは私を救いました。これを回避しようとして2時間無駄にしました!
追加された 著者 Geek,

cx_Oracleはクラス datetime.datetime のオブジェクトの受け渡しをサポートしています。このため、このクラスのオブジェクトがすでにあるとき(たとえば datetime.datetime.now()を呼び出すとき)、それをフォーマットして文字列として渡すのではなく、直接それを渡すべきです。これにより、日付や時刻の形式が間違っているために発生するすべてのエラーを防ぐことができます。

例:

cursor.execute("INSERT INTO SomeTable VALUES(:now)", {'now': datetime.datetime.now()})

秒の小数部の切り捨てを防ぐには、追加の手順を実行する必要があることに注意してください。詳細については、 『Oracle + Pythonを使いこなすために』第2回:作業PrzemysławPiotrowskiによるTimes and Dates の記事。

5
追加された
トンバディをありがとう!あなたは私を救いました。これを回避しようとして2時間無駄にしました!
追加された 著者 Geek,

私の検索が示す限りでは、ORACLEは日付にうるさいことがあるので、これはあなたがする必要があるかもしれないかもしれません。

まず、あなたが持っている日付のフォーマットを確認してください。たとえば、2010/01/26:11:00:00AMのようなものがある場合は、カーソルを次のように実行します。

insert into x
values(99, to_date('2010/01/26:11:00:00AM', 'yyyy/mm/dd:hh:mi:ssam'));
3
追加された
はい、 to_date に明示的なフォーマットを指定することは確実に日付を挿入する方法です。前回チェックしたときにも、ORMは同じことをしていました。
追加された 著者 9000,

私の検索が示す限りでは、ORACLEは日付にうるさいことがあるので、これはあなたがする必要があるかもしれないかもしれません。

まず、あなたが持っている日付のフォーマットを確認してください。たとえば、2010/01/26:11:00:00AMのようなものがある場合は、カーソルを次のように実行します。

insert into x
values(99, to_date('2010/01/26:11:00:00AM', 'yyyy/mm/dd:hh:mi:ssam'));
3
追加された
はい、 to_date に明示的なフォーマットを指定することは確実に日付を挿入する方法です。前回チェックしたときにも、ORMは同じことをしていました。
追加された 著者 9000,

日時関数を使用するには、日時ライブラリをインポートする必要があります。

from datetime import datetime
3
追加された

日時関数を使用するには、日時ライブラリをインポートする必要があります。

from datetime import datetime
3
追加された

あなたはあなたのセッションでnls_date_formatを設定することによってpythonからoracleに日付を変換しなければなりません

>>> rpt_time = time.strftime('%Y-%m-%d %H:%M:%s')
>>> rpt_time
'2014-05-12 21:06:40'

次に、Oracleに挿入する前に、次の操作を行います。

cursor.execute("ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS'")
0
追加された