Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
遍历python sqlite数据库_Python_Sqlite_Python 3.x - Fatal编程技术网

遍历python sqlite数据库

遍历python sqlite数据库,python,sqlite,python-3.x,Python,Sqlite,Python 3.x,我试图遍历SQLite数据库,并对列表中的对象执行检查或操作。我需要使用一个数据库,因为最终的对象数量将相当大,并且在基本排序之后,所有操作本质上都是串行的 我的问题是,我如何遍历一个列表,并在检查一个对象的某些特性后将其放入一个新的数据库对象中?我想执行几个串行“检查”,每次最多将两个对象带入内存,然后重新分配 下面是我的代码示例。当我运行最后一个操作时,我无法“重新运行”同一个循环。如何将对象保存到新的数据库中,而不只是打印对象 import os import sqlite3 as lit

我试图遍历SQLite数据库,并对列表中的对象执行检查或操作。我需要使用一个数据库,因为最终的对象数量将相当大,并且在基本排序之后,所有操作本质上都是串行的

我的问题是,我如何遍历一个列表,并在检查一个对象的某些特性后将其放入一个新的数据库对象中?我想执行几个串行“检查”,每次最多将两个对象带入内存,然后重新分配

下面是我的代码示例。当我运行最后一个操作时,我无法“重新运行”同一个循环。如何将对象保存到新的数据库中,而不只是打印对象

import os
import sqlite3 as lite
import sys
import random
import gc
import pprint

def make_boxspace():

    refine_zone_cube_size = 1

    refine_zone_x1 = 1*refine_zone_cube_size
    refine_zone_y1 = 1*refine_zone_cube_size
    refine_zone_z1 = 1*refine_zone_cube_size
    refine_zone_x2 = refine_zone_x1+(2*refine_zone_cube_size)
    refine_zone_y2 = refine_zone_y1+(1*refine_zone_cube_size)
    refine_zone_z2 = refine_zone_z1+(1*refine_zone_cube_size)

    point_pass_length = (1.0/4.0)

    outlist = []
    for i in range(int((refine_zone_x2-refine_zone_x1)/point_pass_length)):
        for j in range(int((refine_zone_y2-refine_zone_y1)/point_pass_length)):
            for k in range(int((refine_zone_z2-refine_zone_z1)/point_pass_length)):

                if (random.random() > 0.5):
                    binary = True
                else:
                    binary = False

                if binary:
                    x1 = point_pass_length*i
                    y1 = point_pass_length*j
                    z1 = point_pass_length*k
                    x2 = x1+point_pass_length
                    y2 = y1+point_pass_length
                    z2 = z1+point_pass_length

                    vr_lev = int(random.random()*3)

                    outlist.append([\
                    float(str("%.3f" % (x1))),\
                    float(str("%.3f" % (y1))),\
                    float(str("%.3f" % (z1))),\
                    float(str("%.3f" % (x2))),\
                    float(str("%.3f" % (y2))),\
                    float(str("%.3f" % (z2))),\
                    vr_lev
                    ])

    return outlist


### make field of "boxes"
boxes = make_boxspace()

### define database object and cursor object
box_data = lite.connect('boxes.db')
cur = box_data.cursor()

### write the list in memory to the database
cur.execute("DROP TABLE IF EXISTS boxes")
cur.execute("CREATE TABLE boxes(x1,y1,z1,x2,y2,z2,vr)")
cur.executemany("INSERT INTO boxes VALUES(?, ?, ?, ?, ?, ?, ?)", boxes)

### clear the 'boxes' list from memory
del boxes

### re-order the boxes
cur.execute("SELECT * FROM boxes ORDER BY z1 ASC")
cur.execute("SELECT * FROM boxes ORDER BY y1 ASC")
cur.execute("SELECT * FROM boxes ORDER BY x1 ASC")

### save the database
box_data.commit()

### print each item
while True:
    row = cur.fetchone()
    if row == None:
        break
    print(row)

谢谢大家

我真的不明白你在问什么,但我认为你对SQL有一些基本的误解

选择。。。ORDER BY不会对表进行排序,在SELECT之后运行commit不会执行任何操作。以不同的顺序发送三个单独的选择,但只运行一次fetch也没有任何意义:您将只获取最后一个选择提供的内容

也许您只想同时按多个列排序

result = cur.execute("SELECT * FROM boxes ORDER BY z1, y1, x1 ASC")
rows = result.fetchall()

我真的不明白你在问什么,但我认为你对SQL有一些基本的误解

选择。。。ORDER BY不会对表进行排序,在SELECT之后运行commit不会执行任何操作。以不同的顺序发送三个单独的选择,但只运行一次fetch也没有任何意义:您将只获取最后一个选择提供的内容

也许您只想同时按多个列排序

result = cur.execute("SELECT * FROM boxes ORDER BY z1, y1, x1 ASC")
rows = result.fetchall()

我认为连接到sqlite3数据库就像我们所知道的那样简单。 因为我们直接从数据库访问数据库查询和结果,所以我们需要使用fetchall方法将所有结果放在一个列表中,并遍历该列表。因此,您可以通过单个连接在多个列表中获得任意数量的结果。 下面是简单的python代码

conn = sqlite3.connect("database file name")
cur = conn.cursor()
cur.execute("your query")
a_list = cur.fetchall()
for i in a_list:
    "process your list"
"perform another operation using cursor object"

我认为连接到sqlite3数据库就像我们所知道的那样简单。 因为我们直接从数据库访问数据库查询和结果,所以我们需要使用fetchall方法将所有结果放在一个列表中,并遍历该列表。因此,您可以通过单个连接在多个列表中获得任意数量的结果。 下面是简单的python代码

conn = sqlite3.connect("database file name")
cur = conn.cursor()
cur.execute("your query")
a_list = cur.fetchall()
for i in a_list:
    "process your list"
"perform another operation using cursor object"

这不是你的代码的样例,这是整个代码:PLET说它是一个“缩小版”哈哈:Dwhen我运行这个代码,它在我的硬盘上创建了一个新的SqLITE3数据库,称为BOX.DB满盒…什么不起作用?你可能想考虑使用一个这样的。除了为数据库提供更直观的界面外,它还具有抽象数据库引擎sqlite的优点,因此您可以使用其他postgresql、mysql。。。将来,如果你需要备份一秒钟。您希望数据库表框保持原样,还是最终目标是对框中的元素重新排序?这不是您的代码示例,这是整个代码:请说这是“简化版”哈哈:当我运行此代码时,它在我的硬盘上创建了一个新的SqLITE3数据库,称为BOX.DB满盒…什么不起作用?你可能想考虑使用一个这样的。除了为数据库提供更直观的界面外,它还具有抽象数据库引擎sqlite的优点,因此您可以使用其他postgresql、mysql。。。将来,如果你需要备份一秒钟。您希望数据库表框保持原样,还是最终目标是对框中的元素重新排序?好的,谢谢!是的,我是SQLite的新手。理想情况下,我希望遍历“list”表对象,一次比较两个“相邻”对象,然后在此循环期间写入一个全新的数据库。好的,谢谢!是的,我是SQLite的新手。理想情况下,我希望遍历“list”表对象,并一次比较两个“相邻”对象,然后在此循环期间写入一个全新的数据库。cur.getchall应该是cur.fetchalla更简洁的方式:对于cur.executey中的i您的查询:…cur.getchall应该是cur.fetchalla更简洁的方式:对于cur.executey中的i您的查询:。。。