إعادة تعيين عدد المعرف بعد حذف الجدول()
-
21-12-2019 - |
سؤال
لأغراض الاختبار ، أقوم بمسح (حذف) كل جدول قبل تنفيذ التعليمات البرمجية.
for table in reversed(db.metadata.sorted_tables):
engine.execute(table.delete())
do_stuff()
ومع ذلك ، فإن البيانات الجديدة id
تبدأ القيم من حيث السابق id
من اليسار:
التكرار الأول:
id | value
-----+---------
1 | hi
2 | there
التكرار الثاني (حذف الجدول ، إدراج بيانات جديدة):
id | value
-----+---------
3 | good
4 | day
هل هناك أي طريقة لإعادة تعيين id
عد عندما حذف الجدول?
تحرير:يبدو كسرت ذلك ، لم يتم مسح الجدول على الإطلاق الآن
config.py
SQLALCHEMY_DATABASE_URI = 'postgresql://postgres:myPassword@localhost/myDatabase'
app.py
app = Flask(__name__)
app.config.from_pyfile('config.py')
db = SQLAlchemy(app)
models.py
from app import app, db
def clear():
for table in reversed(db.metadata.sorted_tables):
db.engine.execute('TRUNCATE TABLE ' + table.name + ' RESTART IDENTITY CASCADE')
لا يزال يتم إضافة الجدول إلى (باستخدام db.session.add_all()
و db.session.commit()
).ومع ذلك, clear()
لا يفعل شيئا.عندما أقوم بتسجيل الدخول باسم postgres
المستخدم في terminal
وتنفيذ مباشرة TRUNCATE TABLE myTable RESTART IDENTITY CASCADE
, ، يعمل.
table.name
يعطي الأسماء الصحيحة.أن يقودني إلى الاعتقاد هناك شيء خاطئ مع db.engine.execute()
, ، لكن هذا لا معنى له منذ ذلك الحين db.session.add_all()
يعمل
المحلول
اتصل TRUNCATE TABLE MyTable RESTART IDENTITY;
لكل جدول في الحلقة بدلا من الاتصال table.delete()
- هذا يجب إعادة تعيين تسلسل الزيادة التلقائية.