我正在尝试将一些数据从sql server导入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的结果是空数据帧。 我没有收到任何错误消息,因此我们将非常感谢任何信息。
答案 0 :(得分:1)
您的DataFrame保持为空,因为DataFrame.append将
在此框架的末尾附加其他行,返回新对象。
(强调我的。)所以干脆做
data_NS.append(...)
将采用现有的data_NS
帧,向其添加内容,并将结果作为新帧返回,然后将其丢弃,因为它未分配给变量。
我认为您实际上正在尝试做更多类似的事情:
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
但请注意,这种逐行追加可能会相当慢。
答案 1 :(得分:0)
我会这样试试:
connection = pyodbc.connect('your server information')
query = 'SELECT TOP 100 * FROM table'
df = pd.read_sql_query(query, connection)
为避免内存错误,只需调整查询并仅选择所需的列,或根据您查询的数据库类型使用“TOP”或类似内容调整返回的行数。