【问题标题】:Periodically outputting SQL table to a file定期将 SQL 表输出到文件
【发布时间】:2015-07-01 05:36:21
【问题描述】:

我正在尝试编写一个 python 脚本,该脚本会使用我数据库中表的内容不断更新文件。

数据库中的表是不断变化的,所以我也需要定期更新这个文件。我可以执行 select * 查询并获取所有条目,但是如果我可以在应用 .mode 列和 .headers 的格式时获取输出表,那就太好了。

我试图做的是创建一个 SQL 游标并执行“.output file.txt”,但这给了我一个 sqlite 语法错误。我试图从脚本 os.sys("sqlite3 dbname.db 'select * from table;' > file.txt") 调用,但这似乎也不起作用(“'module' object is not callable”)。

有没有办法让我得到格式良好的 sqlite 表?

【问题讨论】:

  • 使用subprocess.check_call 和管道标准输出。
  • 谢谢,成功了!不过只是跟进:它使用了我的 sqliterc,它有 .mode 列和 .headers ——即使我的 sqliterc 是空白的,有没有办法做到这一点?

标签: python sqlite


【解决方案1】:
import subprocess 
f=open('file.txt','w')
subprocess.call(['sqlite3', 'dbname.db', '-csv', 'select * from table'], stdout=f)

【讨论】:

  • 哇...当我试图发布一个经过充分验证和完整的答案时,有人发表了相同想法的单行评论....谈论 1/2 a...
  • 我已经接受了你的回答!不过,我想知道您是否可以帮助我跟进;我的 sqliterc 在这里被使用,它有 .mode 列和 .headers - 即使我的 sqliterc 是空白的,有没有办法做到这一点?
  • 是的,您可以将 -column 和 -header 选项传递给 sqlite3 命令行工具来做同样的事情。或者,您将点命令和 sql 查询放在一个文本文件中,并将该文件的句柄作为可选的 stdin 参数传递给 subprocess.call(这会重定向标准输入)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多