Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 获取我的查询';结果转换为字符串,以便打印_Python_Mysql_Pyodbc - Fatal编程技术网

Python 获取我的查询';结果转换为字符串,以便打印

Python 获取我的查询';结果转换为字符串,以便打印,python,mysql,pyodbc,Python,Mysql,Pyodbc,我有以下问题: 我的功能流程如下所示: def process_query(query, parameters): print query print parameters if(parameters is None): cursor1.execute(query) return cursor1.fetchall() else: cursor1.execute(query, parameters)

我有以下问题:

我的功能流程如下所示:

def process_query(query, parameters):

    print query

    print parameters

    if(parameters is None):

        cursor1.execute(query)

        return cursor1.fetchall()

    else:

        cursor1.execute(query, parameters)

        return cursor1.fetchall()
我在以下函数中调用它:

def recieving_sumrpt():

    theList=[]

    theList=cursor1.execute('SELECT DISTINCT SSN FROM Employee').fetchall()  

    print theList

    templist=[['SSN','Lname','FName','MInit','Known Hours','Unknown hours','Overtime']]

    for i in theList:

        basics= process_query('SELECT SSN, LName, FName, MInit FROM Employee WHERE SSN=?', (i)) 

        templist.append(basics)

        known_hours = process_query('SELECT sum(Coalesce(Hours,0)) FROM  Works_On WHERE ESSN=?', (i))

        print templist, known_hours

        templist.append(known_hours[0])
        count=cursor1.execute('SELECT Distinct ESSN FROM Works_On WHERE ISNULL(Hours) AND ESSN=?', (i)).rowcount

        if count >=1:

            templist.append('Yes')

        else:
            templist.append('No')
问题是当我打印圣殿骑士时,我的外观如下:

[['SSN', 'Lname', 'FName', 'MInit', 'Known Hours', 'Unknown hours', 'Overtime'],

 [('123456789', 'Smith', 'John', 'B')], [(Decimal('40.0'), )], 'No', 'Yes', 

[('333445555', 'Wong', 'Franklin', 'T')], [(Decimal('40.0'), )], 'No', 'Yes', 

[('453453453', 'English', 'Joyce', 'A')], [(Decimal('40.0'), )], 'No', 'Yes', 

[('666884444', 'Narayan', 'Ramesh', 'K')], [(Decimal('40.0'), )], 'No', 'Yes', 

[('888665555', 'Borg', 'James', 'E')], [(Decimal('0.0'), )], 'Yes', 'Yes', 

[('987654321', 'Wallace', 'Jennifer', 'S')], [(Decimal('35.0'), )], 'No', 'Yes', 

[('987987987', 'Jabbar', 'Ahmad', 'V')], [(Decimal('40.0'), )], 'No', 'Yes', 

[('999887777', 'Zelaya', 'Alicia', 'J')], [(Decimal('40.0'), )], 'No', 'Yes']
我认为这会在以后打印结果时引发问题:

def printing(list):

    for i in list:

        print '%-10s %-10s %-10s %-10s %-15s %-10s %-15s' % (i[0],i[1],i[2],i[3],i[4], i[5], i[6])
因为这样会出现错误:“列表索引超出范围”

我相信这是因为我没有以下的外貌:

['999887777', 'Zelaya', 'Alicia', 'J', Decimal('40.0'), 'No', 'Yes']
每行。(可能是错的,这是我的第一个python实验室)

打印功能的输出仅为:

SSN        Lname      FName      MInit      Known Hours     Unknown hours Overtime
没别的了

我怎样才能把这些都做成可以打印的东西呢?是否有可能删除列表中的十进制('40.0')外观?我曾尝试使用append(float(known_hours[0]),但这给了我一个错误,即known_hours必须是一个数字或字符串。此外,我还没有真正弄清楚如何打印;该函数或process_query函数是否有任何问题,因为我在原始给定函数的基础上对其进行了大量配置

list = [['SSN', 'Lname', 'FName', 'MInit', 'Known Hours', 'Unknown hours', 'Overtime'],
        [('123456789', 'Smith', 'John', 'B')],
        [(Decimal('40.0'), )],
        'No',
        'Yes', 
        [('333445555', 'Wong', 'Franklin', 'T')], 
        [(Decimal('40.0'), )]
]

def printing(list):

    for i in list:

        print '%-10s %-10s %-10s %-10s %-15s %-10s %-15s' % (i[0],i[1],i[2],i[3],i[4], i[5], i[6])
最明显的是列表项没有7个条目。。。 事实上,在正确格式化数据时,您可以看到列表的内容甚至不一致。有列表、元组列表、stings等等


我会努力让你走上正确的道路来清理混乱:

def recieving_sumrpt():
    theList = cursor1.execute('SELECT DISTINCT SSN FROM Employee').fetchall()  
    # You get a list of tupple containing each one SSN

    templist=[['SSN','Lname','FName','MInit','Known Hours','Unknown hours','Overtime']]
    # ok: a list of list of 7 strings.

    for i in theList: # for each SSN
        # here i contains a tuple of *1* element
        basics= process_query('SELECT SSN, LName, FName, MInit FROM Employee WHERE SSN=?', i) 
        # basics contains now a list on *one* tupple of *4* items

        templist.append(basics)

    ...
正如您在上面的评论中所看到的,在这一点上,我认为您已经走上了错误的轨道。我的猜测是您想要一致的列表。可以是4项或7项,因为您打算将结果显示为某种表格

最后一句话:这里的主要困难可能是您不理解fetch all返回一个“元组列表”。列表中的每一行的每一项。元组中的每一列包含一项。例如,在查询SSN时,您应该获得如下信息:

[(1,), (2,), (3,)]
^ ^     
 \ \ each "row" is a tuple of 1 item because I selected only one *column*
  \
   \ a list of 3 items because there was 3 rows in my test table

我建议你编辑你的帖子,只提供一个关于这个问题的主题。是关于“获取行”的或者从Python列表中提取数据?我将对此进行研究。我认为问题在于,我得到的字符串不是真正的字符串,因为它涉及元组等。我有这么多内容的原因是,我可以得到一些帮助:将其放入一个有效的字符串中(因此我构建templist的循环)因此,我可以使用打印功能打印它。process_query处于运行状态,因为我遇到了一些关于如何处理的问题,我不能100%确定这是否正确。非常感谢您的回答!我可能还不够清楚。我知道这一点,问题是如何将其转换为没有任何元组的字符串等。因此,我可以使用我的打印功能可以打印出来。@GustavDanell我已经用一些信息编辑了我的答案,这些信息可以帮助你找到自己(大部分)的问题;@GustavDanell作为最后的建议:代码注释、“打印”语句和有意义的代码格式是你一生中最好的朋友!非常感谢你!我不理解fetchall返回数据元组,所以我想大部分问题都是由它引起的。你知道在另一件事上怎么做吗?我曾尝试在fetchone语句中使用while循环,我相信这会解决不需要的元组问题?然而,我确实在len(rows)中出现了错误,我过去经常查看是否需要在几行上循环以使每个行都进入列表,但它抱怨行是非类型的,因此没有任何长度。@Sylvian Leroux这是真的。我倾向于在休息前完成作业,并添加外观的收尾工作,修剪代码和注释,这仅仅是因为我在编程时容易出错,这意味着只需要额外的时间。=)