【问题标题】:invalid literal for int() with base 10 pypyodbc以 10 为基数的 int() 的无效文字 pypyodbc
【发布时间】:2017-05-08 16:29:22
【问题描述】:

当我连接到 HFSQL 数据库以使用 python 中的 pypyodbc 模块和以下代码检索一组数据时

import pypyodbc
connection = pypyodbc.connect( "DSN=odbc_name" )
cursor = connection.cursor()
cursor.execute( "select * from cli" )
result = cursor.fetchall()

我得到“invalid literal for int() with base 10”错误,这个问题的根源是某些列的空值,除了修改数据库表中的空数据之外的任何解决方法。

【问题讨论】:

  • 哪一行产生了错误?
  • result = cursor.fetchall() 是产生错误的行,因为我使用的是 ipython(意思是逐行执行)我确定。
  • 游标不是可迭代的吗,可以让您执行for entry in cursor 之类的操作,然后逐个捕获并修复错误?
  • 据我所知,检索数据的过程并不像你说的那样游标有很多方法,比如 fechone() 不同的是返回的行数,一旦你声明一个变量结果为 I如上所述,您可以对其进行迭代以逐一检索行

标签: python sql database pypyodbc


【解决方案1】:

解决方法是修改site-packages目录下的pypyodbc.py代码, 修改很简单,找方法dt_cvt修改如下:

def dt_cvt(x):
if py_v3:
    x = x.decode('ascii')
if x == '': return None
else: return x

【讨论】:

  • 对软件包进行猴子补丁不是一个好主意:如果更新了新版本,您将无法在不破坏旧代码的情况下进行升级。我很确定有更好的方法!
  • 我完全同意你的看法,我将在 pypyodbc github 上发布问题请求,目前我的时间很紧,所以我会破解它以获得我想要的,这一切都是因为 hfsql这个 RDBMS 没有遵循众所周知的标准。
猜你喜欢
  • 2017-12-06
  • 2013-07-27
  • 2015-10-15
  • 2013-08-04
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多