【问题标题】:Pypyodbc pulling SQL Column as valuePypyodbc 拉取 SQL 列作为值
【发布时间】:2016-06-03 13:15:29
【问题描述】:

我正在使用 pypyodbc 提取数据,但我将简化此示例的数据。我的问题是我有一个名为 475Election 的列,当我从该列中提取数据时,我得到 475 作为 python 中的值。例如:

TradeID    ...Other Values...    475Election
1          ...Other Values...          0

但是当我使用 python 时,我得到了输出

1          ...Other Values...         475.0

我相信这可能是数据类型错误的结果,也可能是 pypyodbc 或只是一般的 SQL 问题。此外,当我在 SQL 中查询此信息时,它会返回正确的值。 475Election 是位数据类型。

编辑* python中的代码

cursor = connection.cursor()
SQLCommand = "SELECT * FROM dbo.Trade"
cursor.execute(SQLCommand)
column_names = [d[0] for d in cursor.description]
try:
    column_names.remove('ssma_timestamp')
except ValueError:
    pass
SQLCommand = "SELECT " + ', '.join(column_names) + " FROM dbo.Trade"
cursor.execute(SQLCommand)
vals = cursor.fetchall()
SQLCommand_steve = "INSERT INTO dbo.Trade (" + ', '.join(column_names) + ") VALUES (" + ','.join('?' * len(column_names)) + ")"
print SQLCommand_steve
print vals
cursor_steve.executemany(SQLCommand_steve, vals)
connection_steve.commit()
connection_steve.close()
connection.close()
print 'done'

输出:

INSERT INTO dbo.Trade (tradeid, *redacted column names for compliance*, 475election) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)
53, u'1', u'2016-01-26 10:11:55', *Redacted, *Redacted, True, *Redacted, *Redacted, False, False, None, None, None, 475.0

最后一个打印值的实际值是 475election 列,应该是 0。我使用的是 Microsoft SQL Server Express(64 位),操作系统是 Microsoft Windows NT 6.1。版本是12.0.4422.0

【问题讨论】:

  • 你从什么风格的 SQL 中提取?我会从被强制转换的值中猜到这一点,但是列名?
  • 数据库引擎?用于产生输出的代码?你的表是如何创建的(有哪些关键参数)?

标签: python sql pypyodbc


【解决方案1】:

我想通了,该列必须从 [475Election] 重命名为 TaxElection 以阻止 pypyodbc 将值作为整数而不是布尔值读取

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-19
    • 2021-12-22
    • 2020-08-01
    • 1970-01-01
    • 2019-12-16
    • 1970-01-01
    • 2011-11-27
    • 2022-01-12
    相关资源
    最近更新 更多