如何在Python中将sqlite导出为CSV而不将其格式化为列表?

nhjlsmyf  于 2023-03-27  发布在  Python
关注(0)|答案(4)|浏览(113)

以下是我目前拥有的:

conn = sqlite3.connect(dbfile)
conn.text_factory = str ## my current (failed) attempt to resolve this
cur = conn.cursor()
data = cur.execute("SELECT * FROM mytable")

f = open('output.csv', 'w')
print >> f, "Column1, Column2, Column3, Etc."
for row in data:
  print >> f, row
f.close()

它创建一个CSV文件,输出如下所示:

Column1, Column2, Column3, Etc.
(1, u'2011-05-05 23:42:29',298776684,1448052234,463564768,-1130996322, None, u'2011-05-06 04:44:41')

我不希望行在括号中,也不希望有引号,也不希望字符串前有'u'。我如何让它在没有这些的情况下将行写入csv?谢谢,

siotufzp

siotufzp1#

你现在要做的是打印出一个元组的python字符串表示,即str(row)的返回值,其中包括引号、'u'和圆括号等。
相反,你希望数据被正确地格式化为CSV文件。好吧,试试csv module。它知道如何为CSV文件格式化,这不足为奇。

with open('output.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerow(['Column 1', 'Column 2', ...])
    writer.writerows(data)

newline=''显然是正确转义带引号的字段中的换行符所必需的。

h6my8fg2

h6my8fg22#

我的版本,工程没有问题,只有几行。

import pandas as pd

conn = sqlite3.connect(db_file, isolation_level=None,
                       detect_types=sqlite3.PARSE_COLNAMES)
db_df = pd.read_sql_query("SELECT * FROM error_log", conn)
db_df.to_csv('database.csv', index=False)

如果需要一个表分隔的文件,请将.csv扩展名更改为.tsv并添加此sep='\t'

khbbv19g

khbbv19g3#

将sqlite数据库表转换为csv文件也可以直接使用sqlite3工具完成:

>sqlite3 c:/sqlite/chinook.db
sqlite> .headers on
sqlite> .mode csv
sqlite> .output data.csv
sqlite> SELECT customerid,
   ...>        firstname,
   ...>        lastname,
   ...>        company
   ...>   FROM customers;
sqlite> .quit

上面的sqlite3命令将在当前目录下创建一个名为data.csv的csv文件(当然,这个文件可以被命名为任何你选择的名称)。更多细节可以在这里获得:http://www.sqlitetutorial.net/sqlite-export-csv/

wvyml7n5

wvyml7n54#

  • 我使用了一个愚蠢但更简单的方法,如果只有一个表存在!*
    首先将数据库转换为Pandas DataFrame
conn = sqlite3.connect(database file)
df = pd.read_sql_query("select * from TABLE", conn)

然后将df转换为CSV文件

df.to_csv(r'...\test_file.csv')

因此,将以test_file.CSV的名称创建CSV文件

相关问题