问题:使用pymysql查询数据,DATE类型的数据都显示None,Hour转换后的数据显示为0,以及部分计算的数据带有Decimal
环境:Python3.10.0,pymysql 1.0.2
代码块:
shopify_item_sql = \
"""
SELECT
'shopify' platform,
osli.sku,
os.site siteName,
os.site_id siteId,
DATE(FROM_UNIXTIME(substr(os.created_at, 1, 10),'%%Y-%%m-%%d %%H:%%i:%%s')) day,
HOUR(FROM_UNIXTIME(substr(os.created_at, 1, 10),'%%Y-%%m-%%d %%H:%%i:%%s')) hour,
sum(os.total_price_usd*(osli.price*osli.quantity/os.total_line_items_price)) amount,
sum(osli.quantity) quantity,
count(distinct os.order_id) orderNum,
sum(osli.quantity) skuNum
FROM sak_rawdata.ord_shopify os RIGHT JOIN sak_rawdata.ord_shopify_line_items osli ON os.id = osli.ord_shopify_id
WHERE osli.sku is not null
and os.id IN ({})
and os.financial_status = 'paid'
AND osli.sku like 'CP33783%%'
GROUP BY osli.sku, os.site_id, DATE(FROM_UNIXTIME(substr(os.created_at, 1, 10),'%%Y-%%m-%%d %%H:%%i:%%s')), HOUR(FROM_UNIXTIME(substr(os.created_at, 1, 10),'%%Y-%%m-%%d %%H:%%i:%%s'));
""".format(",".join(["'%s'" % i.strip() for i in ids]))
items = execute_sql(shopify_item_sql)
print(items)
运行结果:
请教一下这是怎么回事
方案来自 梦想橡皮擦 狂飙组基于 GPT 编写的 “程秘”
可以将 execute_sql 返回的结果遍历并处理成合适的数据类型,如下代码示例:
for item in items:
platform = item[0]
sku = item[1]
siteName = item[2]
siteId = item[3]
day = item[4]
hour = item[5]
amount = float(item[6])
quantity = int(item[7])
orderNum = int(item[8])
skuNum = int(item[9])
# do something with the data
使用 pymysql 查询数据时,有时会出现 DATE 类型的数据显示为 None 和 Hour 转换后的数据显示为 0 的情况。这是因为 pymysql 在读取数据时,需要对不同的数据类型进行转换,而对于 DATE 类型的数据,需要使用 strftime() 函数进行格式化。
以下是一个代码示例,您可以按照这个例子来解决这个问题:
import pymysql
conn = pymysql.connect(
host="localhost",
user="root",
password="root",
database="test_db"
)
cursor = conn.cursor()
# 执行SQL语句
sql = "SELECT * FROM test_table"
cursor.execute(sql)
# 获取所有记录
records = cursor.fetchall()
for row in records:
date = row[0].strftime("%Y-%m-%d")
hour = row[1].hour
decimal = row[2]
print(date, hour, decimal)
# 关闭连接
cursor.close()
conn.close()
请注意,您需要将上面的代码中的 test_db 和 test_table 替换为您自己的数据库名称和表名称。