仅显示PyODBC的可用结果

时间:2018-03-02 05:55:39

标签: python pyodbc

我正在查询数据库并显示名称或结果。如果有几个"迈克尔"数据库中的名称,显示所有姓氏及其姓氏。

如果数据库中只有1个Michael,则显示该Michael的全名以及错误"列表索引超出范围。"

这是因为我要求程序显示名为Michael的4个结果,但只有一个可用。

使用

时如何解决此问题
        for _ in range(0, 4):
            print(str(results[_])) # displays results

以下是一切:

import pypyodbc

def queryfirst():
    return ("SELECT FIRSTNAME, LASTNAME "      
            "FROM dbo.My_Table "
            "WHERE FIRSTNAME = ?")

def sqlfirst():
    firstname = "Michael"
    if True:    
        connection = pypyodbc.connect('Driver={SQL Server};Server=mysSQLserver;Database=MyDatabaseName;Trusted_Connection=yes;')
        cursor = connection.cursor() 
        SQLCommand = queryfirst()
        Values = [firstname]
        cursor.execute(SQLCommand,Values)
        return cursor.fetchmany(4)


def calculate():
    results = sqlfirst()
    if results:
        for _ in range(0, 4):
            print(str(results[_])) # enters results in entry
        connection.close()


calculate()

我不确定如何说"如果结果小于4,则只显示结果。" cursor.fetchmany或cursor.fetchall会有所作为吗?

我需要获得结果的长度吗?

1 个答案:

答案 0 :(得分:1)

乍一看,这不是SQL界面的问题,而是Python的基本机制。

您应该使用基本的for构造:

def calculate():
    results = sqlfirst()
    for r in results:
        print(str(r))

在实践中,它会照顾你有4,1或0的情况。

P.S。除非您打算在稍后阶段对查询进行参数化,否则您可能希望使用变量,因为它是“常量”:

QUERY_FIRST = "SELECT FIRSTNAME, LASTNAME"      
             "FROM dbo.My_Table"
             "WHERE FIRSTNAME = ?"