我目前正在通过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),
似乎每一行都包含在括号内,并用逗号分隔。
我不知道如何把它变成数据框,有什么建议吗?
答案 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'])