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)