Python - 将 pyodbc.fetchall() 操作为 pandas 可用格式
Python - manipulating pyodbc.fetchall() into a pandas usable format
我正在编写一个使用 pyodbc 从数据库获取数据的程序,最终目标是使用 pandas.
分析这些数据
就目前而言,我的程序可以很好地连接到数据库并收集我需要的数据,但是我在组织或格式化这些数据时遇到了一些问题,以便我可以使用 pandas,或者干脆将其干净地写入 .csv 文件(我知道我也可以使用 pandas 来做到这一点)。
这是我的简单程序的基础:
from Logger import Logger
import pyodbc
from configparser import ConfigParser
from connectDB import connectDatabase, disconnectDatabase
config = ConfigParser()
config.read('config.ini')
getNeedlesPlaintiffs = config.get('QUERIES', 'pullNeedlesPlaintiffs')
getNeedlesDefendants = config.get('QUERIES', 'pullNeedlesDefendants')
def pullNeedlesData():
Logger.writeAndPrintLine("Connecting to needles db...", 0)
cnxn = connectDatabase()
if cnxn:
cursor=cnxn.cursor()
Logger.writeAndPrintLine("Connection successful. Getting Plaintiffs...", 0)
cursor.execute(getNeedlesPlaintiffs)
with open('needlesPlaintiffs.csv', 'w') as f:
for row in cursor.fetchall():
row = str(row)
f.write(row)
f.close()
Logger.writeAndPrintLine("Plaintiffs written to file, getting Defendants...", 0)
cursor.execute(getNeedlesDefendants)
with open('needlesDefendants.csv', 'w') as d:
for row in cursor.fetchall():
row = str(row)
d.write(row)
d.close()
disconnectDatabase(cnxn)
Logger.writeAndPrintLine("Defendants obtained, written to file.", 0)
else:
Logger.writeAndPrintLine("Connection to Needles DB Failed.", 2)
if __name__ == "__main__":
pullNeedlesData()
但是,我在 .csv(和控制台)中获得的输出根本无法使用。我想将我的数据解析为字典列表,以便我可以更轻松地使用它进行 pandas.
的分析
例如,像这样的东西(然后我可以 json.loads() 到 pandas 数据帧中):
text_data = '[{"lname": "jones", "fname": "matt", "dob": "01-02-1990", "addr1": "28 sheffield dr"},\
{"lname": "kalinski", "fname": "fred", "dob": "01-02-1980", "addr1": "28 purple st"}, \
{"lname": "kyle", "fname": "ken", "dob": "05-01-1978", "addr1": "28 carlisle dr"}, \
{"lname": "jones", "fname": "matt", "dob": "01-02-1990", "addr1": "new address"}, \
{"lname": "kalinski", "fname": "fred", "dob": "01-02-1980", "addr1": "28 purple st"}, \
{"lname": "kyle", "fname": "ken", "dob": "05-01-1979", "addr1": "other address"}]'
我现在所处的位置,我只是不知道如何将这些数据从 pyodbc.fetchall() 解析为我知道我可以使用的字典列表。此外,我最终希望以可读的方式将结果打印到 csv。
我的数据目前以如下格式返回:
(238384, 'Mr. Nathan Brown', 'Person', datetime.date(1989, 2, 3), '41 Fake Rd 1 \r\nTownName, State 13827')(283928, 'Mr. Logan Green', 'Person', datetime.date(2003, 5, 18), '36 county rd \r\nTownName, State 14432')(38272, 'Mrs. Penellope Blue', 'Person', datetime.date(1988, 1, 27), '123 fake st \r\nTownName, State, 14280)(...)
我意识到我需要创建一个空列表对象,然后将每一行解析到一个字典中,并将其添加到列表中——但我从来没有使用过这种规模的数据,我想知道是否有一个图书馆或其他东西可以使这类工作更容易完成。
感谢您的任何见解。
为什么不直接将数据导入 pandas?
df = pd.read_sql_query(sql_query, db.connection)
我正在编写一个使用 pyodbc 从数据库获取数据的程序,最终目标是使用 pandas.
分析这些数据就目前而言,我的程序可以很好地连接到数据库并收集我需要的数据,但是我在组织或格式化这些数据时遇到了一些问题,以便我可以使用 pandas,或者干脆将其干净地写入 .csv 文件(我知道我也可以使用 pandas 来做到这一点)。
这是我的简单程序的基础:
from Logger import Logger
import pyodbc
from configparser import ConfigParser
from connectDB import connectDatabase, disconnectDatabase
config = ConfigParser()
config.read('config.ini')
getNeedlesPlaintiffs = config.get('QUERIES', 'pullNeedlesPlaintiffs')
getNeedlesDefendants = config.get('QUERIES', 'pullNeedlesDefendants')
def pullNeedlesData():
Logger.writeAndPrintLine("Connecting to needles db...", 0)
cnxn = connectDatabase()
if cnxn:
cursor=cnxn.cursor()
Logger.writeAndPrintLine("Connection successful. Getting Plaintiffs...", 0)
cursor.execute(getNeedlesPlaintiffs)
with open('needlesPlaintiffs.csv', 'w') as f:
for row in cursor.fetchall():
row = str(row)
f.write(row)
f.close()
Logger.writeAndPrintLine("Plaintiffs written to file, getting Defendants...", 0)
cursor.execute(getNeedlesDefendants)
with open('needlesDefendants.csv', 'w') as d:
for row in cursor.fetchall():
row = str(row)
d.write(row)
d.close()
disconnectDatabase(cnxn)
Logger.writeAndPrintLine("Defendants obtained, written to file.", 0)
else:
Logger.writeAndPrintLine("Connection to Needles DB Failed.", 2)
if __name__ == "__main__":
pullNeedlesData()
但是,我在 .csv(和控制台)中获得的输出根本无法使用。我想将我的数据解析为字典列表,以便我可以更轻松地使用它进行 pandas.
的分析例如,像这样的东西(然后我可以 json.loads() 到 pandas 数据帧中):
text_data = '[{"lname": "jones", "fname": "matt", "dob": "01-02-1990", "addr1": "28 sheffield dr"},\
{"lname": "kalinski", "fname": "fred", "dob": "01-02-1980", "addr1": "28 purple st"}, \
{"lname": "kyle", "fname": "ken", "dob": "05-01-1978", "addr1": "28 carlisle dr"}, \
{"lname": "jones", "fname": "matt", "dob": "01-02-1990", "addr1": "new address"}, \
{"lname": "kalinski", "fname": "fred", "dob": "01-02-1980", "addr1": "28 purple st"}, \
{"lname": "kyle", "fname": "ken", "dob": "05-01-1979", "addr1": "other address"}]'
我现在所处的位置,我只是不知道如何将这些数据从 pyodbc.fetchall() 解析为我知道我可以使用的字典列表。此外,我最终希望以可读的方式将结果打印到 csv。
我的数据目前以如下格式返回:
(238384, 'Mr. Nathan Brown', 'Person', datetime.date(1989, 2, 3), '41 Fake Rd 1 \r\nTownName, State 13827')(283928, 'Mr. Logan Green', 'Person', datetime.date(2003, 5, 18), '36 county rd \r\nTownName, State 14432')(38272, 'Mrs. Penellope Blue', 'Person', datetime.date(1988, 1, 27), '123 fake st \r\nTownName, State, 14280)(...)
我意识到我需要创建一个空列表对象,然后将每一行解析到一个字典中,并将其添加到列表中——但我从来没有使用过这种规模的数据,我想知道是否有一个图书馆或其他东西可以使这类工作更容易完成。
感谢您的任何见解。
为什么不直接将数据导入 pandas? df = pd.read_sql_query(sql_query, db.connection)