使用sqlite数据库中的值在python中创建一个文本文件

时间:2009-12-31 20:24:30

标签: python sqlite

我正在尝试构建一个文本文件,它是预定义字符串和变量值的组合,我想从预先存在的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 :(得分: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个单独的查询,因此可能有点慢。主要优化是通过仅使用两个查询(没有i来获取(例如)每个给定j的所有xwhere值来减少查询数量条件yselect value, column作为select子条款 - 无论您是否需要,取决于这种简单方法的表现是否已经满足您的目的。

答案 1 :(得分:0)

我相信如果你使用ORM来访问数据,你会更高兴,而不是如Alex Martelli的回答所示直接使用SQL。看起来您的数据库非常简单,ORM也能正常运行。

我建议你尝试SQLAlchemy或Autumn。 SQLAlchemy功能强大且灵活,已经存在很长时间了。秋天很简单。任何人都应该帮助你。

http://www.sqlalchemy.org/

http://autumn-orm.org/

另一方面,如果Alex Martelli的示例代码已经解决了您的问题并且这是一个简单的一次性问题,那么嘿,抓住解决方案然后去。