【问题标题】:Same code structure - different results when calling .to_sql()相同的代码结构 - 调用 .to_sql() 时的不同结果
【发布时间】:2019-09-24 19:20:27
【问题描述】:

背景

我有 3 个独立的 python 脚本,它们共享相同的结构并有效地执行相同的操作 - 调用 API 请求,检索 XML 数据,将 XML 转换为 ElementTree 对象,然后转换为 pandas DataFrame 对象,然后使用 .to_sql() 导入将该数据框导入到 oracle 数据库中。我写的三个脚本中有两个是成功的,但第三个没有写入数据库,没有返回错误,表创建为空,脚本挂起

来自成功文件的代码:

oracle_db = sa.create_engine('oracle://sName:sName@123.456.78/testDB')
connection = oracle_db.connect()
df.to_sql('TABLE_NAME', connection, if_exists='append',index = False)

我会发布不成功文件的代码,但除了表和变量名之外,它实际上是相同的。

我尝试了什么

我尝试使用 cx_oracle 的引擎来驱动与 数据库没有成功:

   conn = cx_Oracle.connect("sName", "sName","123.456.789.1/Test", encoding = "UTF-8")

我已验证数据框有效。

我已经验证了与数据库的连接。

【问题讨论】:

  • 您是否检查过是否有任何其他代码(可能是前两个脚本?)在有问题的表上有未处理的事务?这可以很好地解释挂起!
  • @AnthonyTuinga 没有骰子,我将“connection.close()”移动到脚本的前面以获取任何打开的连接,虽然它没有抛出错误,但数据仍然没有被写入到数据库。
  • 通过查看dba_locks 视图来检查是否有任何锁阻止了插入。

标签: python sqlalchemy python-requests cx-oracle pandas-to-sql


【解决方案1】:

已解决 - 有一列是严格的整数,所以我必须在 to.sql() 调用中指定数据类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-05
    • 1970-01-01
    相关资源
    最近更新 更多