python - फ्लास्क sqlalchemy कई से अधिक सम्मिलित डेटा
flask flask-sqlalchemy (2)
आपको सीधे अपनी एसोसिएशन टेबल पर कुछ भी जोड़ने की ज़रूरत नहीं है, एसक्लाक्लेमी ऐसा करेगा। यह स्क्लाक्लेमी दस्तावेज से कम या कम है:
association_table = db.Table('association', db.Model.metadata,
db.Column('left_id', db.Integer, db.ForeignKey('left.id')),
db.Column('right_id', db.Integer, db.ForeignKey('right.id'))
)
class Parent(db.Model):
__tablename__ = 'left'
id = db.Column(db.Integer, primary_key=True)
children = db.relationship("Child",
secondary=association_table)
class Child(db.Model):
__tablename__ = 'right'
id = db.Column(db.Integer, primary_key=True)
p = Parent()
c = Child()
p.children.append(c)
db.session.add(p)
db.session.commit()
इसलिए आपका नमूना इस तरह होगा:
student_identifier = db.Table('student_identifier',
db.Column('class_id', db.Integer, db.ForeignKey('classes.class_id')),
db.Column('user_id', db.Integer, db.ForeignKey('students.user_id'))
)
class Student(db.Model):
__tablename__ = 'students'
user_id = db.Column(db.Integer, primary_key=True)
user_fistName = db.Column(db.String(64))
user_lastName = db.Column(db.String(64))
user_email = db.Column(db.String(128), unique=True)
class Class(db.Model):
__tablename__ = 'classes'
class_id = db.Column(db.Integer, primary_key=True)
class_name = db.Column(db.String(128), unique=True)
children = db.relationship("Student",
secondary=student_identifier)
s = Student()
c = Class()
c.children.append(s)
db.session.add(c)
db.session.commit()
मैं यहां फ्लास्क-स्क्लाक्लेमी में कई रिश्तों को बनाने की कोशिश कर रहा हूं, लेकिन ऐसा लगता है कि मुझे नहीं पता कि "कई पहचानकर्ता डेटाबेस" को कैसे भरें। क्या आप कृपया मुझे यह समझने में मदद कर सकते हैं कि मैं क्या गलत कर रहा हूं और इसे कैसे देखना चाहिए?
class User(db.Model):
__tablename__ = 'users'
user_id = db.Column(db.Integer, primary_key=True)
user_fistName = db.Column(db.String(64))
user_lastName = db.Column(db.String(64))
user_email = db.Column(db.String(128), unique=True)
class Class(db.Model):
__tablename__ = 'classes'
class_id = db.Column(db.Integer, primary_key=True)
class_name = db.Column(db.String(128), unique=True)
और फिर मेरा पहचानकर्ता डेटाबेस:
student_identifier = db.Table('student_identifier',
db.Column('class_id', db.Integer, db.ForeignKey('classes.class_id')),
db.Column('user_id', db.Integer, db.ForeignKey('users.user_id'))
)
जब तक मैं डेटाबेस में डेटा डालने का प्रयास करता हूं तब तक ऐसा लगता है।
# User
user1 = User(
user_fistName='John',
user_lastName='Doe',
user_email='[email protected]')
user2 = User(
user_fistName='Jack',
user_lastName='Doe',
user_email='[email protected]')
user3 = User(
user_fistName='Jane',
user_lastName='Doe',
user_email='[email protected]')
db.session.add_all([user1, user2, user3])
db.session.commit()
# Class
cl1 = Class(class_name='0A')
cl2 = Class(class_name='0B')
cl3 = Class(class_name='0C')
cl4 = Class(class_name='Math')
cl5 = Class(class_name='Spanish')
db.session.add_all([cl1, cl2, cl3, cl4, cl5])
db.session.commit()
अब मेरी समस्या यह है कि, मैं कई डेटाबेस में कितने जोड़ूं, क्योंकि मैं वास्तव में 'student_identifier' ऑब्जेक्ट नहीं बना सकता? अगर मैं ऐसा कर सकता था तो शायद ऐसा हो सकता है:
# Student Identifier
sti1 = StiClass(class_id=cl1.class_id, class_name=user1.user_id)
sti2 = StiClass(class_id=cl3.class_id, class_name=user1.user_id)
sti3 = StiClass(class_id=cl4.class_id, class_name=user1.user_id)
sti4 = StiClass(class_id=cl2.class_id, class_name=user2.user_id)
db.session.add_all([sti1, sti2, sti3, sti4])
db.session.commit()
मुझे ओआरएम के साथ कई टेबल में कितने डालने होंगे?
सबसे पहले, student_identifier
को SQLAlchemy प्रतिबिंब तालिका के रूप में परिभाषित किया गया है जो डेटाबेस नहीं है।
आम तौर पर यदि आपके पास मॉडल और प्रतिबिंब तालिका ऑब्जेक्ट्स के बीच सभी रिलेशनशिप सेटअप ठीक से हैं, तो आपको प्रतिबिंब तालिकाओं में डेटा डालने के लिए केवल संबंधित मॉडलों (रिलेशनशिप इंस्ट्रूमेंटलिस्ट में मॉडल ऑब्जेक्ट्स को जोड़कर) से निपटने की आवश्यकता होगी, उदाहरण के लिए, उत्तर @ मेहदी-सादेघी ऊपर प्रदान की गई।
हालांकि, अगर आप संबंध स्थापित नहीं करना चाहते हैं तो सीधे प्रतिबिंब तालिकाओं में डालने का एक तरीका है। उदाहरण के लिए:
statement = student_identifier.insert().values(class_id=cl1.id, user_id=sti1.id)
db.session.execute(statement)
db.session.commit()
इसके बाद, आपको यह देखने में सक्षम होना चाहिए कि student_identifier
प्रतिबिंब तालिका में कई से अधिक रिलेशनशिप पंक्ति डाली गई है। लेन-देन में किए गए प्रत्येक SQL कथन को निष्पादित करने के बाद प्रतिबद्ध होना न भूलें।
उम्मीद है कि एक वैकल्पिक दृष्टिकोण के साथ आपकी मदद करता है।