使用Python从SQL Server数据库检索数据

4

我试图执行以下脚本,但是我既没有得到期望的结果,也没有收到错误信息。我无法确定我哪里做错了。

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,))

任何想法?感激不尽地需要帮助 :)
3个回答

5
您需要使用fetch方法和光标一起使用。例如:
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

文档


它能工作,但我想知道仅使用游标和使用cursor.fetchall()之间的区别,因为在某些示例中,仅使用游标与使用cursor.fetchall()相同? - Mohamed Azizi
游标只是指向数据库的指针。在执行查询后,我们必须显式地获取受查询影响的行,因此我们使用fetchall()方法来实现。 - Hari Krishnan
我的意思是,是否可能只是循环遍历裸游标对象? - Mohamed Azizi
据我所知,你不能这样做。这将导致运行时错误。 - Hari Krishnan
我会继续寻找原因,我知道这是可能的,因为我一直在使用它,并且我知道它对于大结果集非常有效。一旦我找到了什么,我会分享的 :) - Mohamed Azizi

1
我发现这个信息有用,可以将SQL数据库中的数据作为数据框架返回到Python。
import pandas as pd
import pymssql

con = pymssql.connect(server='use-et-aiml-cloudforte-aiops- db.database.windows.net',user='login_username',password='login_password',database='database_name')
cursor = con.cursor()

query = "SELECT * FROM <TABLE_NAME>"
cursor.execute(query)
df = pd.read_sql(query, con)
con.close()

df

0

导入 mysql.connector as mc

创建连接

conn = mc.connect(host='localhost', user='root', passwd='password') print(conn)

#创建游标对象

cur = conn.cursor() print(cur)

cur.execute('show databases')

for i in cur: print(i)

query = "Select * from employee_performance.employ_mod_recent" emp_data = pd.read_sql(query, conn) emp_data


1
目前你的回答不够清晰,请[编辑]以添加更多细节,帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接