如何在Python中将单值SQL查询结果保存为整数变量?
将SQL单值查询结果转为Python整数变量的解决方法
问题分析
你的SQL查询确实返回单个数值,但之前的两种尝试都因为没有正确提取单个值而报错:
- Pandas的
read_sql_query返回DataFrame,取列后得到的是Series对象,无法直接和数值比较; - SQLAlchemy的
execute返回游标结果对象,不是直接的数值类型。
方法1:使用Pandas正确提取数值
需要从DataFrame/Series中取出唯一的单个值,再转为整数:
import pandas as pd my_variable = pd.read_sql_query( sql = f''' SELECT COUNT(DISTINCT ACCOUNT_NUMBER) AS ACCOUNTS FROM MY_TABLE ; ''', con = my_connection ) # 提取唯一值并转为整数(注意列名和SQL中保持大小写一致) my_variable = my_variable["ACCOUNTS"].iloc[0].astype(int) if my_variable > 10000: print("success") else: print("failure")
或者更简洁的写法:
my_variable = pd.read_sql_query( sql='SELECT COUNT(DISTINCT ACCOUNT_NUMBER) FROM MY_TABLE', con=my_connection ).iloc[0, 0].astype(int)
关键:iloc[0](或iloc[0,0])用于定位唯一的结果值,避免操作整个Series/DataFrame。
方法2:使用SQLAlchemy Execute直接获取数值
execute()返回的游标结果需要用scalar()提取单行单列的值,再转为整数:
result = my_connection.execute( f''' SELECT COUNT(DISTINCT ACCOUNT_NUMBER) AS ACCOUNTS FROM MY_TABLE ; ''' ) # 提取单个值并转为整数 my_variable = int(result.scalar()) if my_variable > 10000: print("success") else: print("failure")
关键:scalar()方法直接返回查询结果的第一行第一列,是原生Python数据类型,再用int()确保类型为整数。
内容的提问来源于stack exchange,提问作者SRJCoding
相关产品推荐
相关产品推荐

