繁体   English   中英

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

[英]Create a text file in python using values from a sqlite database

我正在尝试构建一个文本文件,该文件是预定义的字符串和变量值的组合,我想从一个已有的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方面经验有限,但是对任何建议都持开放态度。 任何人的任何投入将不胜感激。

非常感谢您,新年快乐!

保罗

最简单,未优化的方法如下:

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()

这种方法的主要问题是,它使用1682个单独的查询来访问sqlite,因此可能会有点慢。 主要优化将是通过仅用两个查询(通过在y上没有where条件和select value, column作为select子句)获取(例如)每个给定x所有ij值来减少查询数量。您是否需要取决于这种简单方法的性能是否已经满足您的目的。

我相信,如果您使用ORM来访问数据,而不是像Alex Martelli的答案中所示的那样直接使用SQL,那么您会更加高兴。 看来您的数据库非常简单,并且ORM可以正常工作。

我建议您尝试使用SQLAlchemy或Autumn。 SQLAlchemy功能强大且灵活,已经存在了很长时间。 秋天很简单。 任一种都可以帮助您。

http://www.sqlalchemy.org/

http://autumn-orm.org/

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM