キーの連続番号を再作成する方法の1つは、テーブルを削除して再構成することです。
import sqlite3
from pprint import pprint
schema = '''
create table S (
id integer primary key autoincrement not null,
content text not null)'''
def init(db):
db.execute('drop table if exists S')
db.execute(schema)
db.execute('insert into S (content) VALUES ("one")')
db.execute('insert into S (content) VALUES ("two")')
db.execute('insert into S (content) VALUES ("three")')
db.execute('insert into S (content) VALUES ("four")')
db.commit()
def dump(db):
for row in db.execute('select * from S order by ID'):
print row
print
def renumber(db):
# To reorganize the primary key, create a new table
db.execute('create temp table temp_S as select content from S order by id')
db.execute('drop table S')
db.execute(schema)
db.execute('insert into S (content) '
' select content from temp_S order by rowid')
db.commit()
db = sqlite3.connect(':memory:')
init(db)
dump(db)
db.execute('delete from S where id in (1,3)')
db.commit()
dump(db)
renumber(db)
dump(db)
結果:
(1, u'one')
(2, u'two')
(3, u'three')
(4, u'four')
(2, u'two')
(4, u'four')
(1, u'two')
(2, u'four')
'カウント(ID) '配列内のギャップに影響されない以下のコードで
renumber()
関数を考えます。より高いIDを更新していないという問題は、正確には何と思いますか? –関連:http://stackoverflow.com/questions/14023292/how-to-get-rownum-like-column-in-sqlite-iphone/19199219#19199219 –
私の問題は、count(id)が正しくないという事実です。行IDの影響を受けます。それは私が望むので、それのようにうまくいくのですが、テーブル内のすべての上位IDの発生を更新する方法を知りたかったので、IDはカウント(IDが不足していません)と等しくなり、テーブルシーケンスを更新します。 – Artemis