Hello,
I've run into a problem that's present in SQLAlchemy 1.2, but not 1.1.15
when run against an Oracle 11.2 database using cx_Oracle 6.1.
When creating the table `TIMESTAMP_TEST` with
CREATE TABLE TIMESTAMP_TEST (
TS TIMESTAMP(6)
)
and running the following code
import datetime
import sys
import sqlalchemy as sa
def test(user, password, host, port, database_name):
# Setup
metadata = sa.MetaData()
connect_string = "oracle+cx_oracle://{}:{}@{}:{}/{}".format(user,
password, host, port, database_name)
engine = sa.create_engine(connect_string)
timestamp_table = sa.Table("timestamp_test", metadata, sa.Column("ts",
sa.TIMESTAMP(timezone=False)))
# Insert
insert = timestamp_table.insert().values(ts=datetime.datetime.now())
print("insert:", insert)
print("insert params:", insert.compile().params)
with engine.connect() as connection:
connection.execute(insert)
# Get database connection details.
...
test(user, password, host, port, database_name)
fractional seconds *aren't* present in the inserted timestamp when the code
runs with SQLAlchemy 1.2. The fractional seconds *are* present when the
code runs against SQLAlchemy 1.1.15. In both cases the version of cx_Oracle
is 6.1. The behavior is the same when using `sa.dialects.oracle.TIMESTAMP`
instead of `sa.TIMESTAMP`.
Possibly this is to do with the changes described here:
https://docs.sqlalchemy.org/en/latest/changelog/migration_12.html#dialect-improvements-and-changes-oracle
The documentation says that the `cursor.setinputsizes` calls were removed.
http://www.oracle.com/technetwork/articles/dsl/prez-python-timesanddates-093014.html
states that `cursor.setinputsizes` must be used to be able to insert
timestamps with sub-second precision into an Oracle database database with
cx_Oracle. Now, this article is pretty old, so I don't know how relevant
this still is.
Related tickets are possibly
https://bitbucket.org/zzzeek/sqlalchemy/issues/304/oracle-timestamp-with-sub-second
https://bitbucket.org/zzzeek/sqlalchemy/issues/604/oracle-sub-second-timestamp-handling
"Related" in the sense that they describe or refer to what presumably must
be done to get the sub-second precision upon insertion. Then again, these
tickets are old, but I wanted to mention them in case they help.
Best regards,
Stefan
--
SQLAlchemy -
The Python SQL Toolkit and Object Relational Mapper
http://www.sqlalchemy.org/
To post example code, please provide an MCVE: Minimal, Complete, and Verifiable
Example. See http://stackoverflow.com/help/mcve for a full description.
---
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.