0

我正在努力在 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)

我一直在从传递给执行语句的函数定义中获取表名时遇到错误,并且遵循了 API,所以我不确定该转向何处。

4

1 回答 1

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()为你做这个。

于 2013-11-05T18:55:11.950 回答