我是一名SQL新手,我有一个应用程序,我想通过一组格式为(p1,p2,id)
的元组来迭代并将当前元组与前一个元组进行比较。通过SQL数据库迭代
如果当前的元组的p1
匹配的p2
前面:
- 当前的元组
p1
被分配到以前的元组的p1
- 以前的元组被删除
这里是一个例子,说明我的申请:
import sqlite3 as lite
vectors = [
(1,2,1),
(2,3,2),
(3,4,3),
(4,5,4),
(6,7,5),
(7,8,6),
(8,9,7),
(9,10,8),
(11,12,9),
(12,13,10),
(13,14,11),
(15,16,12)
]
### define database object and cursor objects
vec_data = lite.connect('vecs.db')
cur = vec_data.cursor()
editor_cursor = vec_data.cursor()
### put python objects in SQL
cur.execute("DROP TABLE IF EXISTS vecs")
cur.execute("CREATE TABLE vecs(p1,p2,id INTEGER PRIMARY KEY)")
cur.executemany("INSERT INTO vecs VALUES(?, ?, ?)", vectors)
### iterate through and 'merge' vecs
cur.execute("SELECT * FROM vecs ORDER BY p1 ASC")
old_vec = None
while True:
try:
old_vec = vec
except NameError:
old_vec = None
vec = cur.fetchone()
if vec == None:
break
if (vec is not None) and (old_vec is not None):
old_vec_p1 = old_vec[0]
old_vec_p2 = old_vec[1]
vec_p1 = vec[0]
vec_id = vec[2]
old_vec_id = old_vec[2]
if (old_vec_p2 == vec_p1):
editor_cursor.execute("UPDATE vecs SET p1=? WHERE id=?",(old_vec_p1,vec_id))
editor_cursor.execute("DELETE FROM vecs WHERE id=?",(old_vec_id,))
cur.execute("SELECT * FROM vecs")
while True:
vec = cur.fetchone()
if vec == None:
break
print(vec)
vec_data.close()
...现在给我的投入,我想输出是:
(1, 5, 4)
(6, 10, 8)
(11, 14, 11)
(15, 16, 12)
...而是我得到:
(3, 5, 4)
(8, 10, 8)
(12, 14, 11)
(15, 16, 12)
什么,我想要做的当量(但纯粹在Python中完成)是:
vectors = [
[1,2,1],
[2,3,2],
[3,4,3],
[4,5,4],
[6,7,5],
[7,8,6],
[8,9,7],
[9,10,8],
[11,12,9],
[12,13,10],
[13,14,11],
[15,16,12]
]
i=0
while i < (len(vectors)-1):
vec = (vectors[i+1])
old_vec = (vectors[i])
old_vec_p1 = old_vec[0]
old_vec_p2 = old_vec[1]
vec_p1 = vec[0]
vec_id = vec[2]
old_vec_id = old_vec[2]
if (old_vec_p2 == vec_p1):
vectors[i+1][0] = old_vec_p1
del vectors[i]
else:
i += 1
for i in vectors:
print i
那么,我有一个SQL的误解,或者我有我的代码中的错误?