मेरा प्रश्न वास्तव में एक एसक्यूएलकेमी-घोषणात्मक मॉडल को कैसे सेट अप करना है जिसे पीईसाइड के क्यूटेबल व्यू क्लास से एक्सेस किया जा सकता है।PySide + SQLAlchemy में QTableView के लिए 'मॉडल' का डिज़ाइन।
मैं सिर्फ अनिवार्य रूप से Object Relational tutorial
के लिए एक सामने अंत को लागू करने की कोशिश कर रहा हूँ दुर्भाग्य से मैं भ्रम की कुछ बिंदुओं की है। मैं यह बताने की कोशिश करूंगा कि मैं कहां हूं।
मैंने उस बिंदु पर SQLAlchemy ट्यूटोरियल का पालन किया है जहां मेरे पास दो संबंधित तालिकाओं हैं और बिना किसी समस्या के उन लोगों को कुशल/क्वेरी कर सकते हैं। QTableView class को स्थापित करने का प्रयास करने के लिए मेरे खुद के मॉडल के साथ setData() method की आवश्यकता है, या डिफ़ॉल्ट मॉडल का उपयोग करने के लिए setItem() method की आवश्यकता है।
तो प्रश्न यह है कि मॉडल को कैसे डिजाइन किया जाए। मुझे लगता है कि डेटाबेस को क्वेरी/संशोधित करने के लिए उन दो विधियों में से एक को परिभाषित करना है। मुझे ऐसा करने का सही तरीका नहीं पता है।
मॉडल को उपयोगकर्ता के पहले नाम और आखिरी नाम की तरह कुछ पंक्तियों पर दोहराया जाना चाहिए जब तक कि सभी पते दिखाए जाएं, फिर अगले उपयोगकर्ता पर जाएं। मैं इसे प्रॉम्प्ट पर प्रिंट करने के लिए नेस्टेड के साथ कर सकता हूं लेकिन मुझे नहीं लगता कि एक बड़ी सूची बनाने का तरीका यह है कि ऐसा लगता है कि डेटाबेस को पहले स्थान पर रखने के बिंदु को हराने के लिए लगता है ...
मुझे यह भी नहीं पता कि डेटाबेस कब बढ़ता है, क्या पूरी तालिका तत्काल हो जाती है और मेमोरी में होती है या क्यूटी लोड पंक्तियों और कॉलम करता है क्योंकि उपयोगकर्ता स्क्रॉल करते समय देखने के लिए आते हैं?
यहां बहुत सारे टेक्स्ट खेद है, लेकिन स्पष्ट होने की कोशिश कर रहे हैं। यदि कोई अतिरिक्त चीजें हैं जो मैं जोड़ सकता हूं तो कृपया मुझे बताएं। या अगर मैं गलत ट्रैक पर पूरी तरह से कर रहा हूँ ....
from PySide import QtCore, QtGui
from sqlalchemy import Column, Integer, String, Text, Sequence, ForeignKey, Date, Boolean, create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, relationship, backref, aliased
import datetime
engine = create_engine('sqlite:///reminder.db')
Base = declarative_base()
class User(Base):
__tablename__ = 'users_db'
id = Column(Integer, Sequence('user_id_seq'), primary_key=True)
lastname = Column(String)
firstname = Column(String)
contact = Column(String)
history = Column(Text)
notes = Column(Text)
addresses = relationship('Address', order_by='Address.id',
backref='user', cascade='all, delete, delete-orphan')
def __init__(self, firstname, lastname, contact):
self.firstname = firstname
self.lastname = lastname
self.contact = contact
def __repr__(self):
return "<User('{0}', '{1}', '{2}')>".format(self.firstname, self.lastname, self.contact)
class Address(Base):
__tablename__ = 'addresses_db'
id = Column(Integer, primary_key=True)
address = Column(String(150))
date = Column(Date)
check1 = Column(Boolean)
check2 = Column(Boolean)
user_id = Column(Integer, ForeignKey('users_db.id'))
def __init__(self, address, date):
self.address = address
self.date = date
self.check1 = False
self.check2 = False
def __repr__(self):
return "<Address('{0}', '{1}')>".format(self.address, self.date)
if __name__ == '__main__':
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()
header = [User.firstname, User.lastname, nextaddressfromUser]
>>> for user in session.query(User).all():
... for addr in user.addresses:
... print user.firstname, user.lastname, addr.address
अच्छा लगता है। देर हो चुकी है तो अभी इसे आजमा नहीं सकता है। क्या आप table_item.setData (QtCore.Qt.UserRole + 1, उपयोगकर्ता) – jbbiomed
की व्याख्या कर सकते हैं इसका उपयोग यह है कि आप वास्तव में उपयोगकर्ता ऑब्जेक्ट में हेरफेर कर सकते हैं, न केवल अपना नाम प्रदर्शित कर सकते हैं ... (उदाहरण के लिए)। मैं एक उदाहरण दिखाने के लिए अपना जवाब अपडेट करूंगा। – jadkik94
व्याख्या करने के लिए अच्छा धन्यवाद। मुझे लगता है कि आप केवल आपके द्वारा पोस्ट किए गए पहले कोड में संक्षेप में हैं और मैं सही जगह पर सही उपयोगकर्ता का संदर्भ आसानी से जोड़ सकता हूं और कोई जादू नहीं है जिसका आप उपयोग कर रहे हैं। – jbbiomed