使用循环将 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
但请注意,这种逐行追加的速度可能相当慢。
我正在尝试将一些数据从 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
但请注意,这种逐行追加的速度可能相当慢。