【问题标题】:How to fix 'TypeError: expecting string or bytes object' error in Python如何修复 Python 中的“TypeError:期望字符串或字节对象”错误
【发布时间】:2019-04-18 14:02:37
【问题描述】:

我想在表格中插入一行。但是我得到了 TypeError: Expecting string or bytes object 这个错误。

Traceback(最近一次调用最后一次):文件 “d:\Git\Repos\mavi\oracle_connection.py”,第 19 行,在 c.prepare(QUERY,{"expr":expr, "expr2":expr2}) TypeError: Expecting string or bytes object

import cx_Oracle
dsn_tns = cx_Oracle.makedsn(***)
conn = cx_Oracle.connect(***)
c = conn.cursor()

expr = bytes('', 'utf-8')
expr2 = bytes('ML_TEST', 'utf-8')

QUERY = '''
    INSERT INTO dev_log (LOG, SQ_DEV_LOG_ID, LF_TEKLIF_WS, PACKAGE BODY, LINE_NO)
    VALUES
    (:expr,:expr,:expr2,:expr,:expr)
'''

rows = [] 

c.prepare(QUERY,{"expr":expr, "expr2":expr2})      
c.executemany(None, rows)
conn.commit()

conn.close()

我该如何解决这个问题?

【问题讨论】:

  • 您发布的代码仅包含 21 行。你确定你没有遗漏什么吗?
  • @HampusLarsson 是的,有 cmets,我编辑了
  • Şevval,你能描述一下你的表,以便我们可以看到列的数据类型吗?
  • @BarbarosÖzhan 顺序为 , int , string, string, int
  • 我想,这解释了这个问题,因为替换变量expr同时用于integerstringclob

标签: python sql oracle sql-insert


【解决方案1】:

试试:

c.prepare(QUERY)      
c.executemany(None, [{"expr":expr, "expr2":expr2}])

从文档看来,您应该将参数传递给 executemany,而不是 prepare

https://cx-oracle.readthedocs.io/en/latest/cursor.html

【讨论】:

  • 现在它给出了这个错误“ c.executemany(None, [{"expr":expr, "expr2":expr2}]) cx_Oracle.DatabaseError: ORA-00917: missing comma "
  • 这可能是因为您的“PACKAGE BODY”列名称中有空格,您应该在引号中指定它。
  • 我该如何解决?我应该如何表示它?
猜你喜欢
  • 1970-01-01
  • 2019-01-27
  • 1970-01-01
  • 2020-11-09
  • 2017-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多