在Python中使用SQLite数据库的值创建文本文件

1 投票
2 回答
1718 浏览
提问于 2025-04-15 17:31

我正在尝试创建一个文本文件,这个文件的内容是一些预定义的字符串和我想从一个已有的sqlite数据库中获取的变量值。这个文本文件每一行的格式大致是这样的:

约束 n: 值 i < 值 j

其中 n 是一个整数,每一行都会加一。值 i 是在表 i 的第 x 行第 y 列找到的值,而值 j 是在表 j 的第 x 行第 y 列找到的值。我需要遍历数据库中这些表的每一个值。我的目标是使用嵌套的 while 循环来遍历表中的每一个值,类似于:

>>> while x < 30:
         y = 1
         while y < 30:
              #code to populate text file goes here
              n = n + 1
              y = y + 1
         x = x + 1

我对 python 有一些有限的经验,但我非常欢迎任何建议。任何人提供的意见我都会非常感激。

非常感谢,祝您新年快乐!

保罗

2 个回答

0

我觉得如果你用ORM来访问数据,而不是直接用SQL,就会开心很多,像Alex Martelli的回答那样。看起来你的数据库很简单,ORM会很好用。

我建议你试试SQLAlchemy或者Autumn。SQLAlchemy功能强大且灵活,已经存在很长时间了。Autumn则非常简单。无论哪个都能帮到你。

http://www.sqlalchemy.org/

http://autumn-orm.org/

另一方面,如果Alex Martelli的示例代码已经解决了你的问题,而且这个问题很简单,那就直接用这个解决方案吧。

3

最简单、没有优化的方法大概是这样的:

import sqlite3
conn = sqlite3.connect('whatever.file')
c = conn.cursor

out = open('results.txt', 'w')
n = 1

for x in range(1, 30):
  for y in range(1, 30):
    c.execute('select value from i where row=? and column=?', (x, y))
    i = c.fetchone()[0]
    c.execute('select value from j where row=? and column=?', (x, y))
    j = c.fetchone()[0]
    out.write('constraint %d: %s < %s\n' % (n, i, j))
    n += 1

out.close()
conn.close()

这个方法的主要问题是,它需要对sqlite进行1682次单独的查询,所以可能会有点慢。主要的优化方法是减少查询次数,比如可以通过只用两个查询来获取每个给定的 x 对应的所有 ij 值(也就是在 y 上不加任何 where 条件,并将 select value, column 作为 select 子句)——是否需要这样做取决于这个简单的方法的性能是否已经满足你的需求。

撰写回答