使用Python

时间:2018-08-13 10:26:53

标签: python sql sql-server tsql

我正在尝试执行以下脚本。但是我既没有得到预期的结果,也没有收到错误消息,也无法弄清楚我在哪里做错了。

import pyodbc 
cnxn = pyodbc.connect("Driver={SQL Server Native Client 11.0};"
                        "Server=mySRVERNAME;"
                        "Database=MYDB;"
                        "uid=sa;pwd=MYPWD;"
                        "Trusted_Connection=yes;")


cursor = cnxn.cursor()
cursor.execute('select DISTINCT firstname,lastname,coalesce(middlename,\' \') as middlename from Person.Person')

for row in cursor:
    print('row = %r' % (row,))

有什么想法吗?任何帮助表示赞赏:)

1 个答案:

答案 0 :(得分:4)

您必须与光标一起使用访存方法。例如

for row in cursor.fetchall():
    print('row = %r' % (row,))

编辑:

fetchall函数返回列表中所有剩余的行。

    If there are no rows, an empty list is returned. 
    If there are a lot of rows, *this will use a lot of memory.* 

未读取的行由数据库驱动程序以紧凑格式存储,并且通常从数据库服务器批量发送。

一次只读取所需的行将节省大量内存

如果我们要一次处理一行,我们可以将光标本身用作插入器 而且我们可以简化它,因为cursor.execute()总是返回一个游标:

for row in cursor.execute("select bla, anotherbla from blabla"): 
    print row.bla, row.anotherbla

Documentation