使用循环将 pyodbc.Rows 附加到数据框中

Append pyodbc.Rows into a data frame using a loop

我正在尝试将一些数据从 sql 服务器导入到 python。我想逐行导入数据并将其迭代地附加到数据框。

到目前为止我的代码是:

data_NS = pd.DataFrame(columns=Fields_NS)
i=0

while(i < 10):
    row = cursor.fetchone()
    rowAsList = list(row)
    data_NS.append(rowAsList)
    i = i+1
conn.close()

data_NS 的结果是空数据框。 我没有收到任何错误消息,因此将不胜感激任何信息。

我会这样尝试:

connection = pyodbc.connect('your server information')
query = 'SELECT TOP 100 * FROM table'
df = pd.read_sql_query(query, connection)

为避免内存错误,只需调整您的查询,仅 select 您需要的列,或者根据查询的类型使用 "TOP" 或类似的方式调整您带回的行数您正在查询的数据库。

您的 DataFrame 仍为空,因为 DataFrame.append

Append rows of other to the end of this frame, returning a new object.

(强调我的。)所以简单地做

data_NS.append(...)

将采用现有的 data_NS 帧,向其添加内容,并将结果 return 作为新帧,然后将其丢弃,因为它未分配给变量。

我认为你实际上是在尝试做更像这样的事情:

fields_NS = ["id", "txt"]
data_NS = pd.DataFrame(columns=fields_NS)

sql = """\
SELECT 1 AS id, 'foo' as txt
UNION ALL
SELECT 2 AS id, 'bar' as txt
"""
crsr.execute(sql)

i = 0
while i < 10:
    row = crsr.fetchone()
    if not row:
        break
    row_as_dict = dict(zip(fields_NS, row))
    data_NS = data_NS.append(row_as_dict, ignore_index=True)
    i += 1

但请注意,这种逐行追加的速度可能相当慢。