Tôi vừa chạy qua một vấn đề khá khó hiểu, và sau khi kiểm tra tôi đã thấy rằng NONE của các câu trả lời có sẵn là đủ.Nhận giá trị chèn vào cuối cùng từ MySQL bằng cách sử dụng SQLAlchemy
Tôi đã thấy các đề xuất khác nhau nhưng dường như không có khả năng trả về giá trị được chèn cuối cùng cho trường auto_increment trong MySQL.
Tôi đã xem các ví dụ đề cập đến việc sử dụng session.flush() để thêm bản ghi và sau đó truy lục id. Tuy nhiên điều đó dường như luôn trở 0.
Tôi cũng đã thấy ví dụ đề cập đến việc sử dụng các session.refresh() nhưng điều đó đặt ra các lỗi sau: InvalidRequestError: Không thể làm mới dụ ''
Những gì tôi cố gắng để làm dường như điên rồ đơn giản nhưng tôi dường như không thể tìm ra bí mật.
Tôi đang sử dụng phương pháp khai báo.
Do đó, mã của tôi trông giống như sau:
class Foo(Base):
__tablename__ = 'tblfoo'
__table_args__ = {'mysql_engine':'InnoDB'}
ModelID = Column(INTEGER(unsigned=True), default=0, primary_key=True, autoincrement=True)
ModelName = Column(Unicode(255), nullable=True, index=True)
ModelMemo = Column(Unicode(255), nullable=True)
f = Foo(ModelName='Bar', ModelMemo='Foo')
session.add(f)
session.flush()
Tại thời điểm này, đối tượng f đã được đẩy lên DB, và đã tự động gán độc đáo id khóa chính. Tuy nhiên, tôi không thể tìm cách để có được giá trị để sử dụng trong một số hoạt động bổ sung. Tôi muốn làm như sau:
my_new_id = f.ModelID
Tôi biết tôi chỉ đơn giản là có thể thực hiện một truy vấn để tra cứu các ModelID dựa trên các thông số khác nhưng tôi không muốn nếu có thể.
Tôi sẽ đánh giá cao mọi thông tin chi tiết về giải pháp cho vấn đề này.
Cảm ơn bạn đã trợ giúp trước.
Bắt tốt, không nhận thấy mặc định = 0. –
Nhật ký máy chủ sẽ luôn hoạt động để tìm ra vấn đề :) – Nilesh
Ugh ... vâng, bắt thú vị. Đầu của tôi là trong thế giới SQL, nơi một giá trị mặc định được yêu cầu cho một trường khóa chính khi bạn tạo bảng. Cảm ơn bạn đã tìm thấy. – PlaidFan