سؤال

لأغراض الاختبار ، أقوم بمسح (حذف) كل جدول قبل تنفيذ التعليمات البرمجية.

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() - هذا يجب إعادة تعيين تسلسل الزيادة التلقائية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top