Câu hỏi của tôi thực sự là cách thiết lập mô hình khai báo SQLAlchemy có thể được truy cập từ lớp QTableView của PySide.Thiết kế mô hình '' cho QTableView trong PySide + SQLAlchemy.
Tôi chỉ cố gắng để về cơ bản thực hiện một giao diện người cho Object Relational tutorial
Đáng tiếc là tôi có một vài điểm của sự nhầm lẫn. Tôi sẽ cố gắng giải thích tôi đang ở đâu.
Tôi đã làm theo hướng dẫn SQLAlchemy đến điểm mà tôi có hai bảng có liên quan và có thể thao tác/truy vấn những người không có vấn đề gì. Việc cố gắng thiết lập một số QTableView class rõ ràng yêu cầu setData() method bằng mô hình của riêng tôi hoặc sử dụng mô hình mặc định yêu cầu setItem() method.
Vì vậy, câu hỏi là cách thiết kế mô hình. Tôi đoán điều này có nghĩa là xác định một trong hai phương thức đó để truy vấn/sửa đổi cơ sở dữ liệu. Tôi không biết đúng cách để làm điều này.
Mô hình được cho là giống như tên người dùng và họ được lặp lại trên một vài hàng cho đến khi tất cả các địa chỉ được hiển thị, sau đó chuyển sang Người dùng tiếp theo. Tôi có thể làm điều này với lồng cho vòng để in này tại dấu nhắc nhưng tôi không nghĩ rằng làm cho một danh sách lớn là con đường để đi như là dường như để đánh bại các điểm có cơ sở dữ liệu ở nơi đầu tiên ...
Tôi cũng không biết điều gì sẽ xảy ra khi cơ sở dữ liệu phát triển, toàn bộ bảng có được khởi tạo và giữ trong bộ nhớ hay Qt tải hàng và cột khi chúng đến để xem khi người dùng cuộn?
Rất nhiều văn bản ở đây xin lỗi, nhưng cố gắng rõ ràng. Nếu có thêm bất kỳ thứ gì tôi có thể thêm, hãy cho tôi biết. Hoặc nếu tôi hoàn toàn theo dõi sai ...
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
Có vẻ ổn. Muộn của nó nên không thể thử nó ngay bây giờ. Bạn có thể vui lòng giải thích table_item.setData (QtCore.Qt.UserRole + 1, người dùng) – jbbiomed
Điều này được sử dụng để bạn có thể thực sự thao tác đối tượng User, và không chỉ hiển thị tên của mình ... (ví dụ). Tôi sẽ cập nhật câu trả lời của mình để hiển thị một ví dụ. – jadkik94
cảm ơn bạn vì đã giải thích. Tôi đoán bạn chỉ là ngắn gọn trong mã đầu tiên bạn đăng và tôi có thể dễ dàng thêm một tham chiếu đến đúng người dùng ở đúng nơi và không có phép thuật mà bạn đang sử dụng. – jbbiomed