उपरोक्त कोड में कुछ भी गलत नहीं है। वास्तव में, आपको autoincrement=True
. की भी आवश्यकता नहीं है या db.Sequence('seq_reg_id', start=1, increment=1),
चूंकि SQLAlchemy स्वचालित रूप से पहला Integer
सेट करेगा PK स्तंभ जिसे FK के रूप में autoincrement=True
. के रूप में चिह्नित नहीं किया गया है ।
यहां, मैंने आपके आधार पर एक कार्यशील सेटअप तैयार किया है। अगर आप डिक्लेरेटिव बेस बेस्ड क्लास का इस्तेमाल करते हैं तो SQLAlechemy का ORM उनके साथ id's जेनरेट करने और ऑब्जेक्ट्स को पॉप्युलेट करने का ख्याल रखेगा। जिसे आपने अपनी वस्तु के उदाहरण बनाने के लिए परिभाषित किया है।
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.debug = True
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://user:[email protected]/testdb'
app.config['SQLALCHEMY_ECHO'] = True
db = SQLAlchemy(app)
class Region(db.Model):
__tablename__ = 'regions'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100))
db.drop_all()
db.create_all()
region = Region(name='Over Yonder Thar')
app.logger.info(region.id) # currently None, before persistence
db.session.add(region)
db.session.commit()
app.logger.info(region.id) # gets assigned an id of 1 after being persisted
region2 = Region(name='Yet Another Up Yar')
db.session.add(region2)
db.session.commit()
app.logger.info(region2.id) # and 2
if __name__ == '__main__':
app.run(port=9001)