python sqlite3创建表错误处理

时间:2018-05-21 19:33:06

标签: python python-3.x csv sqlite

在python 3中,我使用sqlite3和csv包来读取csv文件中的行,然后使用csv文件创建一个表。以一种不光彩的方式

        self.cur.execute("drop table if exists tempTable")
        with open(filename, 'r') as f:
            reader = csv.reader(f)
            #create the columns for the table
            s = ""
            headers = []
            columns = self.format_headers(next(reader))
            first = True
            #issue table commands
            for i in columns:
                headers.append((i,i))
                if first:
                    s+= str(i) + ' text'
                    first = False
                else:
                    s += ', ' + str(i) + ' text'
            final = "create table tempTable( " + s + ");"
            print(final)
            input()
            self.cur.execute(final)

我在测试时发现了一个有趣的错误。

这是csv文件的第一行:

  

IP地址,资产名称,,,

对于csv,文件中包含额外的逗号itselt但没有数据...我的解析器尝试为它创建一个列。

阅读标题后,最终看起来像这样:

  

创建表tempTable(ip_address text,asset_name text,text,text,text);

...这是一个非法的sql命令

我可以为空白创建一个传递,但是这不会起作用,因为在某些情况下空白是合法的,并且csv文件依赖于这些数量的列以便数据按顺序排列。

            rows = [row for row in reader]
            for row in rows:
                s = 'insert into tempTable({0}) values ({1});'
                s = s.format(','.join('{!r}'.format(c) for c in columns), ','.join('{!r}'.format(cell) for cell in row)) 
                self.cur.execute(s)

专栏示例:

  

1.1.1.1,abc123 ,,,

有没有更好的方法来创建表格?如果没有,我怎么能处理这个bug做出最小的改变?

0 个答案:

没有答案