将sqlite3表写入csv

时间:2013-11-05 18:50:50

标签: python csv sqlite

我正在努力在python中创建一个函数,它接受一个表名并输出一个CSV(逗号分隔)和该表的内容。到目前为止,我的代码如下:

def tableWriter(tableName): 
    with open('table.csv', 'wb') as f: 
        writer = csv.writer(f) 
        for row in c.execute("SELECT * FROM '"+tableName+"'"): 
            writer.writerows(row)

我一直有错误从传递给execute语句的函数定义中获取表名,并且遵循了API,因此我不知道还能在哪里转。

1 个答案:

答案 0 :(得分:2)

您将表名括在引号中;这使它成为SQL中的字符串文字,而不是表引用。也许你想用双引号,反引号或方括号代替?有关差异的快速概述,请参阅SQLite网站上的SQL As Understood By SQLite

  

'keyword'
  单引号中的关键字是字符串文字。

     

"keyword"
  双引号中的关键字是标识符。

     

[keyword]
  方括号中的关键字是标识符。这不是标准的SQL。此引用机制由MS Access和SQL Server使用,并包含在SQLite中以实现兼容性。

     

`keyword`
  用严重重音符号(ASCII代码96)括起来的关键字是标识符。这不是标准的SQL。这种引用机制由MySQL使用,并且包含在SQLite中以实现兼容性。

使用字符串格式而不是串联,以下内容应该有效:

def tableWriter(tableName): 
    with open('table.csv', 'wb') as f: 
        writer = csv.writer(f)
        c.execute('SELECT * FROM "{0}"'.format(tableName)
        writer.writerows(c)

无需遍历结果行; writer.writerows()为您做到这一点。