我正在尝试构建一个文本文件,它是预定义字符串和变量值的组合,我想从预先存在的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方面经验有限,但对任何建议都很开放。任何人都有的任何输入将非常感激。
非常感谢和新年快乐!
保
答案 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
的所有x
和where
值来减少查询数量条件y
和select value, column
作为select
子条款 - 无论您是否需要,取决于这种简单方法的表现是否已经满足您的目的。
答案 1 :(得分:0)
我相信如果你使用ORM来访问数据,你会更高兴,而不是如Alex Martelli的回答所示直接使用SQL。看起来您的数据库非常简单,ORM也能正常运行。
我建议你尝试SQLAlchemy或Autumn。 SQLAlchemy功能强大且灵活,已经存在很长时间了。秋天很简单。任何人都应该帮助你。
另一方面,如果Alex Martelli的示例代码已经解决了您的问题并且这是一个简单的一次性问题,那么嘿,抓住解决方案然后去。