Closed marc-mclean1 closed 2 years ago
I am looking into it. Will update you shortly.
it is also interesting to note, the following causes an error:
# does not work
e = create_engine("db2+ibm_db://user:pass@host[:port]/database")
e.connect()
but if I force a connection to be made via the read_sql() method, then the connect() call works fine.
# works fine
e = create_engine("db2+ibm_db://user:pass@host[:port]/database")
dff = pd.read_sql("select * from model_output_1 limit 10", con=e)
e.connect()
With the latest version this works fine. Sqlalchemy : 1.4.35 ibm_db_sa : 0.3.7 ibm_db : 3.1.1 python : 3.10.1
dff = pd.read_sql("select * from \"demoTab1\"",con=engine)
print(dff)
dff.to_sql(name='testTab1',con=engine, schema='NEWTON', if_exists='replace',index=False)
q = text("select * from \"testTab1\"")
conn = engine.connect()
result = conn.execute(q)
row = result.fetchall()
print(row)
2022-04-26 06:25:42,406 INFO sqlalchemy.engine.Engine SELECT "SYSCAT"."TABLES"."TABNAME"
FROM "SYSCAT"."TABLES"
WHERE "SYSCAT"."TABLES"."TABSCHEMA" = ? AND "SYSCAT"."TABLES"."TABNAME" = ?
2022-04-26 06:25:42,407 INFO sqlalchemy.engine.Engine [dialect ibm_db_sa+ibm_db_sa does not support caching 0.00034s] (b'NEWTON', b'select * from "demoTab1"')
2022-04-26 06:25:42,410 INFO sqlalchemy.engine.Engine select * from "demoTab1"
2022-04-26 06:25:42,410 INFO sqlalchemy.engine.Engine [raw sql] ()
id Name Address
0 1 Arnab Kolkata-700094
1 2 Akhil Bangalore-43
2 3 Aniket Bangalore-52
3 4 Arghya Kolkata-94
2022-04-26 06:25:42,433 INFO sqlalchemy.engine.Engine SELECT "SYSCAT"."TABLES"."TABNAME"
FROM "SYSCAT"."TABLES"
WHERE "SYSCAT"."TABLES"."TABSCHEMA" = ? AND "SYSCAT"."TABLES"."TABNAME" = ?
2022-04-26 06:25:42,435 INFO sqlalchemy.engine.Engine [dialect ibm_db_sa+ibm_db_sa does not support caching 0.00127s] (b'NEWTON', b'testTab1')
2022-04-26 06:25:42,437 INFO sqlalchemy.engine.Engine SELECT "SYSCAT"."TABLES"."TABNAME"
FROM "SYSCAT"."TABLES"
WHERE "SYSCAT"."TABLES"."TABSCHEMA" = ? AND "SYSCAT"."TABLES"."TABNAME" = ?
2022-04-26 06:25:42,443 INFO sqlalchemy.engine.Engine [dialect ibm_db_sa+ibm_db_sa does not support caching 0.00549s] (b'NEWTON', b'testTab1')
2022-04-26 06:25:42,449 INFO sqlalchemy.engine.Engine SELECT "SYSCAT"."TABLES"."TABNAME"
FROM "SYSCAT"."TABLES"
WHERE "SYSCAT"."TABLES"."TYPE" = ? AND "SYSCAT"."TABLES"."TABSCHEMA" = ? ORDER BY "SYSCAT"."TABLES"."TABNAME"
2022-04-26 06:25:42,489 INFO sqlalchemy.engine.Engine [dialect ibm_db_sa+ibm_db_sa does not support caching 0.03998s] (b'T', b'NEWTON')
2022-04-26 06:25:42,494 INFO sqlalchemy.engine.Engine SELECT "SYSCAT"."COLUMNS"."COLNAME", "SYSCAT"."COLUMNS"."TYPENAME", "SYSCAT"."COLUMNS"."DEFAULT", "SYSCAT"."COLUMNS"."NULLS", "SYSCAT"."COLUMNS"."LENGTH", "SYSCAT"."COLUMNS"."SCALE", "SYSCAT"."COLUMNS"."IDENTITY", "SYSCAT"."COLUMNS"."GENERATED", "SYSCAT"."COLUMNS"."REMARKS"
FROM "SYSCAT"."COLUMNS"
WHERE "SYSCAT"."COLUMNS"."TABSCHEMA" = ? AND "SYSCAT"."COLUMNS"."TABNAME" = ? ORDER BY "SYSCAT"."COLUMNS"."COLNO"
2022-04-26 06:25:42,496 INFO sqlalchemy.engine.Engine [dialect ibm_db_sa+ibm_db_sa does not support caching 0.00152s] (b'NEWTON', b'testTab1')
2022-04-26 06:25:42,520 INFO sqlalchemy.engine.Engine SELECT "SYSCAT"."INDEXES"."COLNAMES", "SYSCAT"."INDEXES"."INDNAME"
FROM "SYSCAT"."INDEXES"
WHERE "SYSCAT"."INDEXES"."TABSCHEMA" = ? AND "SYSCAT"."INDEXES"."TABNAME" = ? AND "SYSCAT"."INDEXES"."UNIQUERULE" = ? ORDER BY "SYSCAT"."INDEXES"."TABSCHEMA", "SYSCAT"."INDEXES"."TABNAME"
2022-04-26 06:25:42,520 INFO sqlalchemy.engine.Engine [dialect ibm_db_sa+ibm_db_sa does not support caching 0.00042s] (b'NEWTON', b'testTab1', b'P')
2022-04-26 06:25:42,614 INFO sqlalchemy.engine.Engine SELECT "SYSIBM"."SQLFOREIGNKEYS"."FK_NAME", "SYSIBM"."SQLFOREIGNKEYS"."FKTABLE_SCHEM", "SYSIBM"."SQLFOREIGNKEYS"."FKTABLE_NAME", "SYSIBM"."SQLFOREIGNKEYS"."FKCOLUMN_NAME", "SYSIBM"."SQLFOREIGNKEYS"."PK_NAME", "SYSIBM"."SQLFOREIGNKEYS"."PKTABLE_SCHEM", "SYSIBM"."SQLFOREIGNKEYS"."PKTABLE_NAME", "SYSIBM"."SQLFOREIGNKEYS"."PKCOLUMN_NAME"
FROM "SYSIBM"."SQLFOREIGNKEYS"
WHERE "SYSIBM"."SQLFOREIGNKEYS"."FKTABLE_SCHEM" = ? AND "SYSIBM"."SQLFOREIGNKEYS"."FKTABLE_NAME" = ? ORDER BY "SYSIBM"."SQLFOREIGNKEYS"."KEY_SEQ"
2022-04-26 06:25:42,614 INFO sqlalchemy.engine.Engine [dialect ibm_db_sa+ibm_db_sa does not support caching 0.00050s] (b'NEWTON', b'testTab1')
2022-04-26 06:25:42,857 INFO sqlalchemy.engine.Engine SELECT "SYSCAT"."INDEXES"."INDNAME", "SYSCAT"."INDEXES"."COLNAMES", "SYSCAT"."INDEXES"."UNIQUERULE", "SYSCAT"."INDEXES"."SYSTEM_REQUIRED"
FROM "SYSCAT"."INDEXES"
WHERE "SYSCAT"."INDEXES"."TABSCHEMA" = ? AND "SYSCAT"."INDEXES"."TABNAME" = ? ORDER BY "SYSCAT"."INDEXES"."TABNAME"
2022-04-26 06:25:42,857 INFO sqlalchemy.engine.Engine [dialect ibm_db_sa+ibm_db_sa does not support caching 0.00042s] (b'NEWTON', b'testTab1')
2022-04-26 06:25:42,869 INFO sqlalchemy.engine.Engine SELECT "SYSCAT"."KEYCOLUSE"."CONSTNAME", "SYSCAT"."KEYCOLUSE"."COLNAME"
FROM "SYSCAT"."KEYCOLUSE", "SYSCAT"."TABCONST"
WHERE "SYSCAT"."KEYCOLUSE"."CONSTNAME" = "SYSCAT"."TABCONST"."CONSTNAME" AND "SYSCAT"."TABCONST"."TABNAME" = ? AND "SYSCAT"."TABCONST"."TABSCHEMA" = ? AND "SYSCAT"."TABCONST"."TYPE" = ? ORDER BY "SYSCAT"."KEYCOLUSE"."CONSTNAME"
2022-04-26 06:25:42,869 INFO sqlalchemy.engine.Engine [dialect ibm_db_sa+ibm_db_sa does not support caching 0.00045s] (b'testTab1', b'NEWTON', b'U')
2022-04-26 06:25:42,877 INFO sqlalchemy.engine.Engine SELECT "SYSCAT"."TABLES"."REMARKS"
FROM "SYSCAT"."TABLES"
WHERE "SYSCAT"."TABLES"."TYPE" = ? AND "SYSCAT"."TABLES"."TABSCHEMA" = ? AND "SYSCAT"."TABLES"."TABNAME" = ?
2022-04-26 06:25:42,878 INFO sqlalchemy.engine.Engine [dialect ibm_db_sa+ibm_db_sa does not support caching 0.00034s] (b'T', b'NEWTON', b'testTab1')
2022-04-26 06:25:42,886 INFO sqlalchemy.engine.Engine BEGIN (implicit)
2022-04-26 06:25:42,888 INFO sqlalchemy.engine.Engine
DROP TABLE "NEWTON"."testTab1"
2022-04-26 06:25:42,891 INFO sqlalchemy.engine.Engine [no key 0.00372s] ()
2022-04-26 06:25:42,987 INFO sqlalchemy.engine.Engine COMMIT
2022-04-26 06:25:43,008 INFO sqlalchemy.engine.Engine BEGIN (implicit)
2022-04-26 06:25:43,010 INFO sqlalchemy.engine.Engine
CREATE TABLE "NEWTON"."testTab1" (
id BIGINT,
"Name" CLOB,
"Address" CLOB
)
2022-04-26 06:25:43,015 INFO sqlalchemy.engine.Engine [no key 0.00532s] ()
2022-04-26 06:25:43,243 INFO sqlalchemy.engine.Engine COMMIT
2022-04-26 06:25:43,252 INFO sqlalchemy.engine.Engine BEGIN (implicit)
2022-04-26 06:25:43,254 INFO sqlalchemy.engine.Engine INSERT INTO "NEWTON"."testTab1" (id, "Name", "Address") VALUES (?, ?, ?)
2022-04-26 06:25:43,254 INFO sqlalchemy.engine.Engine [dialect ibm_db_sa+ibm_db_sa does not support caching 0.00042s] ((1, 'Arnab', 'Kolkata-700094'), (2, 'Akhil', 'Bangalore-43'), (3, 'Aniket', 'Bangalore-52'), (4, 'Arghya', 'Kolkata-94'))
2022-04-26 06:25:43,261 INFO sqlalchemy.engine.Engine COMMIT
2022-04-26 06:25:43,268 INFO sqlalchemy.engine.Engine SELECT "SYSCAT"."TABLES"."TABNAME"
FROM "SYSCAT"."TABLES"
WHERE "SYSCAT"."TABLES"."TYPE" = ? AND "SYSCAT"."TABLES"."TABSCHEMA" = ? ORDER BY "SYSCAT"."TABLES"."TABNAME"
2022-04-26 06:25:43,268 INFO sqlalchemy.engine.Engine [dialect ibm_db_sa+ibm_db_sa does not support caching 0.00038s] (b'T', b'NEWTON')
2022-04-26 06:25:43,271 INFO sqlalchemy.engine.Engine select * from "testTab1"
2022-04-26 06:25:43,275 INFO sqlalchemy.engine.Engine [dialect ibm_db_sa+ibm_db_sa does not support caching 0.00405s] ()
[(1, 'Arnab', 'Kolkata-700094'), (2, 'Akhil', 'Bangalore-43'), (3, 'Aniket', 'Bangalore-52'), (4, 'Arghya', 'Kolkata-94')]
No change required.
Works as expected.
I have tried the following engine strings:
retrieving data from table into dataframe is no problem:
writing data from a dataframe to a table is no problem in append mode:
as soon as I switch the if_exists parameter to "replace", I get the following error:
TypeError Traceback (most recent call last)