का उपयोग करके MySQL से अंतिम डाला गया मान प्राप्त करें, मैंने अभी काफी परेशानी की समस्या में भाग लिया है, और परीक्षण के बाद मुझे पता चला है कि उपलब्ध उत्तरों में से कोई भी पर्याप्त नहीं है।SQLAlchemy
मैंने कई सुझाव देखे हैं लेकिन कोई भी MySQL में auto_increment फ़ील्ड के लिए अंतिम सम्मिलित मान वापस करने में सक्षम नहीं प्रतीत होता है।
मैंने ऐसे उदाहरण देखे हैं जो रिकॉर्ड जोड़ने के लिए session.flush() के उपयोग का उल्लेख करते हैं और फिर आईडी पुनर्प्राप्त करते हैं। हालांकि हमेशा वापस जाने के लिए 0.
मैं भी कि session.refresh (के प्रयोग का उल्लेख उदाहरण देखा है लगता है कि), लेकिन यह है कि निम्न त्रुटि को जन्म देती है: InvalidRequestError: उदाहरण के ''
मैं क्या कर रहा हूँ से ताज़ा नहीं किया जा सका ऐसा करने की कोशिश करना बेहद सरल लगता है लेकिन मुझे रहस्य पता लगाना प्रतीत नहीं होता है।
मैं घोषणात्मक दृष्टिकोण का उपयोग कर रहा हूं।
तो, मेरे कोड इस तरह दिखता है:
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()
इस बिंदु पर, वस्तु च डीबी को धक्का दे दिया गया है, और स्वचालित रूप से एक अनूठा प्राथमिक कुंजी आईडी सौंपा गया है। हालांकि, मुझे कुछ अतिरिक्त परिचालनों में उपयोग करने के लिए मूल्य प्राप्त करने का कोई तरीका नहीं मिल रहा है। मैं निम्नलिखित करना चाहते हैं:
my_new_id = f.ModelID
मैं जानता हूँ कि मैं सिर्फ देखने के लिए ModelID अन्य मापदंडों के आधार पर किसी अन्य क्वेरी को निष्पादित कर सकता है, लेकिन मैं नहीं सभी के लिए यदि संभव पसंद करेंगे।
मैं इस समस्या के समाधान में किसी भी अंतर्दृष्टि की सराहना करता हूं।
अग्रिम सहायता के लिए धन्यवाद।
अच्छा पकड़, डिफ़ॉल्ट = 0 नोटिस नहीं किया। –
सर्वर लॉग हमेशा समस्या को खोजने के लिए काम करेगा :) – Nilesh
उह ... हाँ, अच्छा पकड़ो। मेरा सिर SQL दुनिया में था जहां आप तालिका बनाते समय प्राथमिक कुंजी फ़ील्ड के लिए डिफ़ॉल्ट मान आवश्यक है। खोजने के लिए धन्यवाद। – PlaidFan