【发布时间】:2023-02-19 21:55:49
【问题描述】:
我正在编写一个脚本来查询 mariadb 数据库,它返回这样的查询输出
('101', datetime.datetime(2023, 1, 27, 14, 8, 39), datetime.datetime(2023, 1, 27, 14, 8, 39)
相反,我想要这样的输出
('101', '2023-01-27 14:08:39.399', 0, '2023-01-27 14:08:39.399')
try:
conn = mariadb.connect()
except mariadb.Error as e:
print(f"Error connecting to MariaDB Platform: {e}")
sys.exit(1)
# Get Cursor
cur = conn.cursor()
cur.execute("SELECT * FROM <table>")
myresult = cur.fetchall()
print(myresult)
cur.close()
我在尝试使用 pyodbc 时遇到了类似的问题,所以我使用了我的自定义输出转换器,但我没有找到这个库的任何问题 这是我在 pyodbc 中的做法
`
# function to convert datetime.date(2022, 10, 12) with data type date to string
def convert_date_to_string(raw_bytes):
tup = struct.unpack('3h', raw_bytes)
return datetime.date(tup[0], tup[1], tup[2]).strftime('%Y-%m-%d')
conn.add_output_converter(po.SQL_TYPE_DATE, convert_date_to_string)
请为 mariadb 连接器建议一种类似的方法,因为我不想为我所做的每个查询添加解析器,而是我想像上面提到的那样在 pyodbc 中做一些全局的事情。
【问题讨论】:
-
如果它只是关于显示而不更改数据类型:游标对象通常(可以)使用 row_factory。查找基类以及如何设置它(可能在连接上完成)并使用自定义类和处理数据时间对象的自定义
__str__函数扩展该类。类似地为返回的结果编写您自己的(命名的)类元组包装类以用于打印目的。 -
@Daraan 我也想更改类型,因为我正在编写的代码是为了处理 str 数据类型而编写的,因为它是为 sqlite 编写的,我正在将它移植到 mariadb,还有一个问题是我应该改用 mysql 连接器吗?
标签: python mariadb mysql-python