将列表转换为数据框PYTHON - SQL

时间:2017-12-15 14:08:16

标签: python sql-server pandas dataframe

我目前正在通过python从SQL Server中提取一些数据,

使用以下内容:

import pyodbc
data = []
con = pyodbc.connect('Trusted_Connection=yes', driver = '{SQL Server}',server = 'bhxsql2014-dev', database = 'BMAnalytics')

cursor = con.cursor()

cursor.execute(" select * from dbo.EUActiveStores ")
for columns in cursor.fetchall():
    data.append(columns[0:])

print(data)

它以下列格式返回数据(前两行作为样本):

[(1.0, 'Bradford', 'Main', 1.0, 'UK', 850.3489216, 79.0, 'Sharon Watson', 'Malcolm Bateman', 0.0, '199446', 199602.0, 'ST1', 1201.0, '12', 53.794851, -1.755584, 'COMP', 'Main', 'MALL', None), (4.0, 'EASTBOURNE', 'Main', 1.0, 'UK', 646.9788276755199, 60.10629999999999, 'Jocelyn Hill', 'Andrea Varley', 0.0, '199642', 199750.0, 'ST1', 1304.0, '13', 50.7696, 0.2859, 'COMP', 'Main', 'MALL', None),

似乎每一行都包含在括号内,并用逗号分隔。

我不知道如何把它变成数据框,有什么建议吗?

2 个答案:

答案 0 :(得分:6)

使用Pandas.read_sql()方法 - 它会处理其余的事情:

df = pd.read_sql(query, con)

您可能还想使用速度非常快的模块turbodbc

from turbodbc import connect, make_options
options = make_options()
connection = connect(dsn="my_dsn", turbodbc_options=options)

cursor = connection.cursor()
cursor.execute("SELECT A, B FROM my_table")
df = cursor.fetchallarrow(strings_as_dictionary=True).to_pandas()
cursor.close()

答案 1 :(得分:1)

另一种选择是使用Pandas.DataFrame.from_records()方法。但是,如果您需要在构建数据帧之前对查询结果进行任何非熊猫处理,我只会这样做。否则,@ MaxU有更好的答案。

df = pd.DataFrame.from_records(data, columns=['list','of','columns'])