【发布时间】:2019-11-02 18:57:11
【问题描述】:
- Python:2.7.12
- pyodbc: 4.0.24
- 操作系统:Ubuntu 16.4
- 数据库:MySQL 8
- 驱动程序:MySQL 8
预期行为:结果集应在数据类型为 int 的列中包含数字
实际行为:所有int数据类型的列都有0的(如果使用参数化查询)
这是查询 -
-
1.
cursor.execute("SELECT * FROM TABLE where id =7")
结果集:
[(7, 1, None, 1, u'An', u'Zed', None, u'Ms', datetime.datetime(2016, 12, 20, 0, 0), u'F', u'Not To Be Disclosed', None, None, u'SPRING', None, u'4000', datetime.datetime(2009, 5, 20, 18, 55), datetime.datetime(2019, 1, 4, 14, 25, 58, 763000), 0, None, None, None, bytearray(b'\x00\x00\x00\x00\x01(n\xba'))]
-
2.
cursor.execute("SELECT * FROM patients where patient_id=?", [7])`
或
cursor.execute("SELECT * FROM patients where patient_id=?", ['7'])
或
cursor.execute("SELECT * FROM patients where patient_id IN ", [7])
结果集:
[(0, 0, None, 0, u'An', u'Zed', None, u'Ms', datetime.datetime(2016, 12, 20, 0, 0), u'F', u'Not To Be Disclosed', None, None, u'SPRING', None, u'4000', datetime.datetime(2009, 5, 20, 18, 55), datetime.datetime(2019, 1, 4, 14, 25, 58, 763000), 0, None, None, None, bytearray(b'\x00\x00\x00\x00\x01(n\xba'))]
如果使用参数化查询,则结果集的其余部分都可以,但具有 int 数据类型的列全部为 0。
似乎它应该可以正常工作。我可以在这里寻求帮助吗?
编辑:这是表的架构:
CREATE TABLE `patient
`lastname` varchar(30) DEFAULT NULL,
`known_as` varchar(30) DEFAULT NULL,
`title` varchar(50) DEFAULT NULL,
`dob` datetime DEFAULT NULL,
`sex` char(1) DEFAULT NULL,
`address1` varchar(30) DEFAULT NULL,
`address2` varchar(30) DEFAULT NULL,
`address3` varchar(30) DEFAULT NULL,
`city` varchar(30) DEFAULT NULL,
`state` varchar(16) DEFAULT NULL,
`postcode` char(4) DEFAULT NULL,
`datecreated` datetime NOT NULL,
`dateupdated` datetime(6) DEFAULT NULL,
`isrep` tinyint(1) DEFAULT NULL,
`photo` longblob,
`foreign_images_imported` tinyint(1) DEFAULT NULL,
`ismerged` tinyint(1) DEFAULT NULL,
`rowversion` varbinary(8) DEFAULT NULL,
PRIMARY KEY (`patient_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
【问题讨论】:
-
@snakecharmerb 如果您需要更多信息,请告诉我
-
但这对我来说似乎是相当基本的用例。人们如何应对它?
-
我怀疑大多数从 Python 使用 MySQL 的人都在使用 mysqlclient 而不是 pyodbc。