Python mariadb连接器返回日期时间,日期时间

prdp8dxp  于 2023-02-22  发布在  Python
关注(0)|答案(1)|浏览(126)

我正在编写一个脚本来查询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)

请为maraidb连接器建议一个类似的方法,因为我不想为我做的每个查询添加解析器,相反,我想做一些全局性的事情,就像上面提到的pyodbc一样。

1tu0hz3e

1tu0hz3e1#

数据库驱动程序中的默认行为是将数据库值转换为相应的Python数据类型。
如果需要将其转换为另一个值,可以使用CAST函数在SQL级别执行此操作

>>> cursor.execute("select cast(now() as char)")
>>> cursor.fetchone()
('2023-02-19 14:42:51',)

或者通过使用转换器:

>>> import mariadb
>>> from mariadb.constants import FIELD_TYPE
>>> 
>>> def date_to_str(date):
...   return str(date)
... 
>>> conversions= {
...     **{FIELD_TYPE.DATETIME: date_to_str}
... }
>>> 
>>> conn= mariadb.connect(converter=conversions)
>>> cursor=conn.cursor()
>>> cursor.execute("SELECT NOW()")
>>> cursor.fetchone()
('2023-02-19 14:50:29',)

相关问题