导入到SQL Server数据库中

2024-09-30 06:20:56 发布

您现在位置:Python中文网/ 问答频道 /正文

最初,我开始将其导入NoSQL数据库,该数据库工作正常,但找不到正确的报表编写工具。因此,我正在切换到SQL Server,以便可以使用SSR。但将数据导入SQL Server数据库中的表时遇到问题

importncdrdata = "INSERT INTO ncdr.dbo.ncdrdatatest (Hospital, YrQTRid, MetricKey, LineText, Year, Quarter, YrQtrRange, qtrnum, qtrden, qtrpercent, subgroup) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
importvolgroup = "INSERT INTO ncdr.dbo.ncdrvoltest (Hospital, YrQTRid, MetricKey, LineText, Year, Quarter, YrQtrRange, rqtrnum, rqtrden, rqtrpercent, volnum, volpercent, subgroup) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"

def importncdrfile():
        # Open the workbook and select the first worksheet
        wb = xlrd.open_workbook(self.filename)
        sh = wb.sheet_by_index(1)
        # Function to import main set of data
        if yearqtrid.get() == "2019Q3":
            def excelToDict(hospital, metricKey, lineText, year, quarter, yrQtrRange, num, den, percent):
                for rownum in range(12, sh.nrows):
                    ncdr = OrderedDict()
                    row_values = sh.row_values(rownum)
                    ncdr['Hospital'] = hospitalchosen.get()
                    ncdr['YrQTRid'] = yearqtrid.get()
                    ncdr['MetricKey'] = row_values[metricKey]
                    ncdr['LineText'] = row_values[lineText]
                    ncdr['Year'] = year
                    ncdr['Quarter'] = quarter
                    ncdr['YrQtrRange'] = yrQtrRange
                    ncdr['qtrnum'] = row_values[num]
                    ncdr['qtrden'] = row_values[den]
                    ncdr['qtrpercent'] = row_values[percent]
                    ncdr['SubGroup'] = 'holder'
                    ncdr_list.append(ncdr)

            # List to hold dictionaries
            ncdr_list = []
            # Imports data into MongoDB takes the aboce code and then runs the function against each set of data and then repeats for all 4 Quarters
            excelToDict(n,0, 1, 2018, 4, 20184, 2, 4, 6)
            excelToDict(n,0, 1, 2019, 1, 20191, 8, 10, 12)
            excelToDict(n,0, 1, 2019, 2, 20192, 14, 16, 18)
            excelToDict(n,0, 1, 2019, 3, 20193, 20, 22, 24)
            cursor.executemany(importncdrdata, ncdr_list)
            #x = importncdrdata.insert_many(ncdr_list)
            # function to import volume group and rolling quarters
            def excelToDictvol(hospital, metricKey, lineText, year, quarter, yrQtrRange, rqtrnum, rqtrden, rqtrpercent, volnum, volpercent):
                for rownum in range(12, sh.nrows):
                    ncdrvol = OrderedDict()
                    row_values = sh.row_values(rownum)
                    ncdrvol['Hospital'] = hospitalchosen.get()
                    ncdrvol['YrQTRid'] = yearqtrid.get()
                    ncdrvol['MetricKey'] = row_values[metricKey]
                    ncdrvol['LineText'] = row_values[lineText]
                    ncdrvol['Year'] = year
                    ncdrvol['Quarter'] = quarter
                    ncdrvol['YrQtrRange'] = yrQtrRange
                    ncdrvol['rqtrnum'] = row_values[rqtrnum]
                    ncdrvol['rqtrden'] = row_values[rqtrden]
                    ncdrvol['rqtrpercent'] = row_values[rqtrpercent]
                    ncdrvol['volnum'] = row_values[volnum]
                    ncdrvol['volpercent'] = row_values[volpercent]
                    ncdrvol['SubGroup'] = 'holder'
                    ncdr_vollist.append(ncdrvol)

            ncdr_vollist = []
            excelToDictvol(n,0, 1, 2019, 3, 20193, 26, 28, 30, 32, 34)
            #v = importvolgroup.insert_many(ncdr_vollist)
            cursor.executemany(importvolgroup, ncdr_vollist)

我得到的错误是

TypeError: ('Params must be in a list, tuple, or Row', 'HY000')

但我不知道如何将数据导入到列表、元组或行中,以便导入到SQL Server表中

编辑我只是把它编辑成一个元组

            if yearqtrid.get() == "2019Q3":
            def excelToTuple(hospital, metricKey, lineText, year, quarter, yrQtrRange, num, den, percent):
                for rownum in range(12, sh.nrows):
                    ncdr = tuple(['Hospital','YrQTRid','Metrickey','LineText','Year','Quarter','YrQtrRange','qtrnum','qtrden','qtrpercent','SubGroup'])
                    row_values = sh.row_values(rownum)
                    if isinstance(row_values[metricKey], str) :
                         subgroup = (row_values[metricKey], str)
                    ncdr = (hospitalchosen.get(),yearqtrid.get(),row_values[metricKey],row_values[lineText],year,quarter,yrQtrRange,row_values[num],row_values[den],row_values[percent],subgroup)
                    ncdr_tuple.append(ncdr)

Tags: getshyearrowvalueshospitalquarterrownum

热门问题