python 数据库查询到的结果如何能赋值给dataframe并标明列明
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 数据库查询到的结果如何能赋值给dataframe并标明列明相关的知识,希望对你有一定的参考价值。
用下面语句取出了数据库中的数据,怎样才能将他们赋值给DataFrame,并按SQL中的字段名给DataFrame的数据标明列名,谢谢
count=cur.execute('select bug_type,bug_severity,count(bug_type),ft_id from tm_bug group by ft_id,bug_type,bug_severity')
result=cur.fetchall()
columns_name = [tuple[0] for tuple in cursor.description]
data= pd.DataFrame(cursor.fetchall(), columns=columns_name)
cursor.close()
这样写追问
2个问题,
为什么第二句要用tuple[0]
第三句输出data是报错没有被定义data is not defined
第一个问题
你print下cursor.description就知道里面是什么结构了
第二个问题
data是被赋值的,怎么可能报未定义呢?你有没有装pandas啊?
第一个问题已经明白,谢谢
第二个问题,我的确装了pandas并且导入了上图附件是我的代码,请问有什么问题吗?谢谢
另外用fetchall或fetchone取出来的数据是每条(行)数据包括四个字段的四列数据么(四列分别是bug_type,bug_severity,count(bug_type,ft_id),感谢
我写的是oracle的。你的是mysql。
出错原因在于mysql查询回来的数据的结构是元组嵌套的,pandas.DataFrame识别不了.。所以要把查询回来的数据改成dict结构,这样就能识别了。就加一个游标的参数。
cursor = db.cursor(mysql.cursors.DictCursor)
写个示例代码,以后照着写
import pymysql as mysql
import pandas as pd
db = mysql.connect(host="10.2.2.2",user="AIRPORT_DATA",password="157626",database="AIRPORT_DATA" )
cursor = db.cursor(mysql.cursors.DictCursor)
sql = "select * from DATA_TABLE"
cursor.execute(sql)
columns_name = [tuple[0] for tuple in cursor.description]
data= pd.DataFrame(cursor.fetchall(), columns=columns_name)
cursor.close()
db.close()
fetchall或fetchone取出来的数据,有哪些字段,是你的sql决定的。你的sql查了哪些就是哪些。
Oracle 如何给存储过程赋值
我现在定义了一个存储过程,有一个参数,是varchar(20)类型的,我在调用的时候,能不能这样给它赋值:issuccess('123456789');
如果存储过程的名字是issuccess可以这样定义入参 issuccess(PRM_I in varchar2).
调用的时候就可以:
issuccess('123456789');
作为传入的值来处理。
如果需要把存储过程中处理的结果返回出来,那么可以定以OUT 参数:
issuccess(PRM_I in varchar2,PRM_O OUT VARCHAR).
调用之前准备一个变量
VS_OUT varchar2(20);
调用时:
issuccess('123456789',VS_OUT).
过程里面修改PRM_O的值,过程执行完成后可以通过VS_OUT捕获。 参考技术A 应该是定义一个函数,存储过程是不需要输入输出的,函数可以带输入,必须输输出。
CREATE OR REPLACE FUNCTION issuccess (In_char IN VARCHAR2)
RETURN VARCHAR2
IS
tmpVar NUMBER;
BEGIN
tmpVar :=0;
.......................
RETURN TO_CHAR(tmpVar);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
NULL;
WHEN OTHERS
THEN
-- Consider logging the error and then re-raise
RAISE;
END issuccess ;
/
中间过程自己填。
可以赋值使用:V_SCC :=issuccess('123456789');
也可以:select issuccess('123456789') from dual;本回答被提问者采纳 参考技术B 赋值最简单:issuccess = ‘123456789‘;
以上是关于python 数据库查询到的结果如何能赋值给dataframe并标明列明的主要内容,如果未能解决你的问题,请参考以下文章