Tôi đang viết một shim sqlalchemy nhỏ để xuất dữ liệu từ cơ sở dữ liệu MySQL với một số phép biến đổi dữ liệu nhẹ - chủ yếu là thay đổi tên trường. Kịch bản hiện tại của tôi hoạt động tốt nhưng yêu cầu tôi về cơ bản mô tả mô hình của tôi hai lần — một lần trong khai báo lớp và một lần như một danh sách các tên trường để lặp lại.SQLAlchemy introspection của các lớp khai báo
Tôi đang cố gắng tìm ra cách sử dụng nội tâm để xác định các thuộc tính trên hàng đối tượng là các trình truy cập cột. Các công việc sau gần như hoàn hảo:
for attr, value in self.__class__.__dict__.iteritems():
if isinstance(value, sqlalchemy.orm.attributes.InstrumentedAttribute):
self.__class__._columns.append(attr)
ngoại trừ việc accessors liên quan tới nhiều tôi cũng là trường hợp của sqlalchemy.orm.attributes.InstrumentedAttribute, và tôi cần phải bỏ qua những. Có cách nào để phân biệt giữa hai trong khi tôi đang kiểm tra từ điển lớp?
Hầu hết tài liệu tôi đang tìm kiếm về nội suy sqlalchemy đều liên quan đến việc tìm kiếm siêu dữ liệu. Tuy nhiên, vì tôi đổi tên cột, dữ liệu đó không dễ dàng tìm được.
Điều này có vẻ hữu ích hơn việc kiểm tra siêu dữ liệu.tables ['mytable']. Nhưng có vẻ như không cho phép tôi khám phá biến lớp mà bộ mô tả được gán cho lớp thực thể của tôi, vì vậy tôi còn lại với vấn đề ban đầu về cách tạo ra ánh xạ đầu ra các tên thuộc tính lớp cho các giá trị của chúng. –