Tôi có vấn đề sau đây:SQLAlchemy lập bản đồ năng động
Tôi có lớp:
class Word(object):
def __init__(self):
self.id = None
self.columns = {}
def __str__(self):
return "(%s, %s)" % (str(self.id), str(self.columns))
self.columns là một dict đó sẽ tổ chức: giá trị (ColumnName columnValue). Tên của các cột được biết trong thời gian chạy và họ được nạp trong một danh sách wordColumns, ví dụ
wordColumns = ['english', 'korean', 'romanian']
wordTable = Table('word', metadata,
Column('id', Integer, primary_key = True)
)
for columnName in wordColumns:
wordTable.append_column(Column(columnName, String(255), nullable = False))
Tôi thậm chí đã tạo ra một đặc tính mapper rõ ràng để "ép" các cột bảng để được ánh xạ vào từ. cột [columnName], thay vì word.columnName, tôi không nhận được bất kỳ lỗi nào khi ánh xạ, nhưng có vẻ như nó không hoạt động.
mapperProperties = {}
for column in wordColumns:
mapperProperties['columns[\'%']' % column] = wordTable.columns[column]
mapper(Word, wordTable, mapperProperties)
Khi tôi tải một đối tượng văn bản, SQLAlchemy tạo ra một đối tượng trong đó có các word.columns [ 'tiếng Anh'], word.columns [ 'Hàn Quốc'], vv thuộc tính thay vì tải chúng vào word.columns dict . Vì vậy, đối với mỗi cột, nó tạo ra một thuộc tính mới. Hơn nữa từ điển word.columns thậm chí không tồn tại. Cũng giống như vậy, khi tôi cố gắng kiên trì một từ, SQLAlchemy hy vọng sẽ tìm thấy các giá trị cột trong các thuộc tính có tên như word.columns ['english'] (loại chuỗi) thay vì từ điển.columns.
Tôi phải nói rằng kinh nghiệm của tôi với Python và SQLAlchemy là khá hạn chế, có lẽ nó không thể làm những gì tôi đang cố gắng làm.
Bất kỳ trợ giúp nào được đánh giá cao,
Xin cảm ơn trước.
Cảm ơn bạn đã dành thời gian viết câu trả lời hoàn chỉnh như vậy. Tôi đồng ý rằng giải pháp đầu tiên sạch hơn và thanh lịch hơn lần thứ hai. Tôi không có lý do chính đáng nào để sử dụng dict ngoại trừ sự thật rằng đây là thứ "bình thường" xuất hiện trong đầu tôi. Như tôi đã nói trước đây, tôi là người mới trong Python và tôi chưa học được cách nào để tận dụng lợi ích của các ngôn ngữ động. Tôi sẽ sử dụng giải pháp đầu tiên của bạn. Cảm ơn một lần nữa :) –
Tôi không thể có được bao nhiêu bài viết như thế này tồn tại ở đây, nhưng tôi vẫn còn awed khi tôi nhìn thấy một. Cảm ơn bạn đã đặt quá nhiều suy nghĩ vào điều này. Vẫn còn hữu ích, cho những người mới, hơn một năm sau đó. Chúc mừng bạn – Profane
Bây giờ, nếu tôi muốn sử dụng kwarg để bắt đầu Word, như trong w = Word (tiếng Anh = 'tên', tiếng Hàn = 'Phoo', tiếng rumani = 'nume'), nó sẽ hoạt động như thế nào? Trong trường hợp của tôi, nó sẽ tiếp tục ném một lỗi __init__. Cảm ơn! – Julius