আমি কীভাবে জানতে পারি যে আমি SQLLACHEMY_TRACK_MODIFICATIONS অক্ষম করতে পারি কিনা?


136

ফ্ল্যাশ-এসকিউএএলএলএকচেমি ব্যবহার করে এমন আমার অ্যাপটি চালানোর সময় আমি নিম্নলিখিত সতর্কতাটি পেয়ে যাচ্ছি যে SQLALCHEMY_TRACK_MODIFICATIONSবিকল্পটি অক্ষম হয়ে যাবে।

/home/david/.virtualenvs/flask-sqlalchemy/lib/python3.5/site-packages/flask_sqlalchemy/__init__.py:800: UserWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future.  Set it to True to suppress this warning.
  warnings.warn('SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future.  Set it to True to suppress this warning.')

এই বিকল্পটি কী করে তা আমি অনুসন্ধান করার চেষ্টা করেছি, তবে ফ্ল্যাস্ক-এসকিউএএলএলএকচেমি ডকুমেন্টেশন এই ট্র্যাকিংটি কী ব্যবহার করে সে সম্পর্কে পরিষ্কার নয়।

SQLALCHEMY_TRACK_MODIFICATIONS

যদি সত্যকে সেট করা থাকে (ডিফল্ট) ফ্লাস্ক-এসকিউএএলএলএইচএমি বস্তুর পরিবর্তনগুলি ট্র্যাক করবে এবং সংকেত নির্গত করবে। এর জন্য অতিরিক্ত মেমরি প্রয়োজন এবং প্রয়োজন না হলে অক্ষম করা যায়।

আমি কীভাবে জানতে পারি যে আমার প্রকল্পের প্রয়োজন আছে SQLALCHEMY_TRACK_MODIFICATIONS = Trueবা আমি নিরাপদে এই বৈশিষ্ট্যটি অক্ষম করতে পারি এবং আমার সার্ভারে স্মৃতি সংরক্ষণ করতে পারি?

উত্তর:


175

সম্ভবত আপনার অ্যাপ্লিকেশনটি ফ্লাস্ক-এসকিউএএলএলএকচেমি ইভেন্ট সিস্টেমটি ব্যবহার করে না, তাই আপনি সম্ভবত এটি বন্ধ করা নিরাপদ। আপনাকে যাচাই করতে কোডটি অডিট করতে হবে - আপনি যে কোনও কিছুতে হুক করে যাচ্ছেন models_committedবা তা অনুসন্ধান করছেনbefore_models_committed । আপনি যদি মনে করেন যে আপনি ফ্লাস্ক-এসকিউএএলএলএকচেমি ইভেন্ট সিস্টেমটি ব্যবহার করছেন তবে আপনার সম্ভবত এসকিউএএলএলচেমির বিল্ট-ইন ইভেন্ট সিস্টেমটি ব্যবহার করার জন্য কোডটি আপডেট করা উচিত।

ফ্লাস্ক-এসকিউএএলএলএকএলইমি ইভেন্ট ইভেন্টটি বন্ধ করতে (এবং সতর্কতাটি অক্ষম করুন), কেবল যুক্ত করুন:

SQLALCHEMY_TRACK_MODIFICATIONS = False

ডিফল্ট পরিবর্তন না হওয়া পর্যন্ত আপনার অ্যাপ্লিকেশন কনফিগারেশনে (সম্ভবত ফ্লাস্ক-এসকিউএএলএলচেমি ভি 3)।


পটভূমি - সতর্কতা আপনাকে যা বলছে তা এখানে:

ফ্লাস্ক-এসকিউএএলএলচেমির নিজস্ব ইভেন্ট নোটিফিকেশন সিস্টেম রয়েছে যা এসকিউএএলএলচেমির শীর্ষে স্তরযুক্ত হয়ে যায়। এটি করার জন্য, এটি এসকিউএএলএলচেমি সেশনে পরিবর্তনগুলি ট্র্যাক করে। এটি অতিরিক্ত সংস্থান গ্রহণ করে, সুতরাং বিকল্পটি SQLALCHEMY_TRACK_MODIFICATIONSআপনাকে পরিবর্তন ট্র্যাকিং সিস্টেমটি অক্ষম করতে দেয়। বর্তমানে বিকল্পটি ডিফল্ট হয়েছে Trueতবে ভবিষ্যতে, সেই ডিফল্টটিতে পরিবর্তিত হবে False, যার ফলে ইভেন্ট সিস্টেমটি অক্ষম হবে।

আমি যতদূর বুঝতে পারি, পরিবর্তনের যুক্তিটি তিনগুণ:

  1. অনেকেই ফ্লাস্ক-এসকিউএএএলএলএক্লেমির ইভেন্ট সিস্টেম ব্যবহার করেন না, তবে বেশিরভাগ লোকেরা বুঝতে পারে না যে তারা এটিকে অক্ষম করে সিস্টেমের সংস্থানগুলি সংরক্ষণ করতে পারে। সুতরাং একটি স্যানার ডিফল্ট হ'ল এটি অক্ষম করা এবং যারা এটি চায় তারা এটি চালু করতে পারে।

  2. ফ্লাস্ক-এসকিউএএলএলএক্লেমির ইভেন্ট সিস্টেমটি বরং বাগিচা হয়েছে (নীচে উল্লিখিত পুলের অনুরোধে লিঙ্কিত সমস্যাগুলি দেখুন), খুব কম লোক ব্যবহার করে এমন বৈশিষ্ট্যের অতিরিক্ত রক্ষণাবেক্ষণের প্রয়োজন।

  3. V0.7 এ, এসকিউএলএলচেমি নিজেই কাস্টম ইভেন্টগুলি তৈরি করার ক্ষমতা সহ একটি শক্তিশালী ইভেন্ট সিস্টেম যুক্ত করেছে। আদর্শভাবে, ফ্লাস্ক-এসকিউএএএলএলএকএই ইভেন্ট সিস্টেমটি কয়েকটি কাস্টম এসকিএলএলএলচেমি ইভেন্ট হুক এবং শ্রোতাদের তৈরি করা ছাড়া আর কিছু করা উচিত নয় এবং তারপরে এসকিএএলএলচেমি নিজেই ইভেন্ট ট্রিগারটি পরিচালনা করতে দেয়।

এই সতর্কতাটি ট্রিগার করা শুরু করার জন্য টানা অনুরোধের আশেপাশে আপনি আরও আলোচনায় দেখতে পারেন ।


1
ঠিক আছে, আমরা কাছাকাছি আসছি, তবে একটি বাস্তব উত্তরের দিকে গুরুত্বপূর্ণ পদক্ষেপটি এখনও অনুপস্থিত: কোন ফাংশন / পদ্ধতি কলটি বোঝায় যে এই ইভেন্ট সিস্টেমটি ব্যবহৃত হয়েছে?
রবার্ট

1
যে কোনও কোড সম্ভবত হুক হবে সেই নির্দিষ্ট ইভেন্টগুলির তালিকা তৈরি করার জন্য উত্তরটি আপডেট করেছে ... আপনি যদি সেগুলি গ্রিপ করেন এবং কিছু না আসে তবে আপনি সম্ভবত নিরাপদ।
জেফ উইডম্যান

12
রেকর্ডটির জন্য, এই মুদ্রণটি এড়াতে আপনি প্রকৃত পরিবর্তনশীলটি সত্য বা মিথ্যাতে সেট করতে চান app.config['SQLALCHEMY_TRACK_MODIFICATIONS'], সেখানে অ্যাপ্লিকেশনটি আপনার ফ্লাস্ক অ্যাপটি ব্যবহার করে তৈরি করা হয়েছেflask.Flask()
মাইকেল হিউসন

3
সাধারণভাবে এটি সত্য; তবে আপনি যদি কোনও অবজেক্ট প্যাটার্ন বা ফাইল ব্যবহার করে কনফিগার করছেন তবে এটি কিছুটা আলাদা হতে পারে ( flask.pocoo.org/docs/latest/config )। তবে আপনি যদি এটি করছেন তবে আপনার অ্যাপে ভেরিয়েবলগুলি কীভাবে কনফিগার করতে হয় আপনি সম্ভবত ইতিমধ্যে তা জানেন।
জেফ উইডম্যান

72

জেফ উইডম্যানের বিশদ বিবরণ কেবল নির্ভুল।

যেহেতু এই অধিকারটি পাওয়ার আগে আমার কিছু অনুলিপি লড়াই হয়েছিল আমি পরেরটির জন্য এটি সহজ করে তুলতে চাই যা আমার জুতাগুলিতে থাকবে।

আপনার কোডে, সাথে সাথেই :

app = Flask(__name__)

আপনি যদি ট্র্যাক পরিবর্তনগুলি সক্ষম করতে চান তবে কেবল যোগ করুন:

app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True

অন্যথায়, আপনি যদি এই বৈশিষ্ট্যটি ব্যবহার না করে থাকেন তবে সিস্টেমের সংস্থানগুলি নষ্ট না করার জন্য আপনি মানটিকে ভুতে পরিবর্তন করতে পারেন। এটি এখনও সতর্কতাটি নিঃশব্দ করবে যেহেতু আপনি যে কোনওভাবেই কনফিগারেশনে স্পষ্টভাবে সেট করেছেন।

এখানে ভুয়া মান সহ একই স্নিপেট:

app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

এই যুক্ত পরামর্শ এবং বিশদ জন্য জেফ উইডম্যান ধন্যবাদ।


2
এটি কেবলমাত্র যদি আপনি প্রকৃতপক্ষে ট্র্যাক পরিবর্তনগুলি সক্ষম করতে চান is আপনি যদি এটি ব্যবহার না করে থাকেন তবে আপনি এটি এমন পরিবর্তন করতে চান Falseযাতে আপনি সিস্টেমের সংস্থান নষ্ট করবেন না। আপনি এখনও স্পষ্টভাবে কনফিগারেশনটি সেট করছেন যেহেতু এটি সতর্কতাটি নিঃশব্দ করবে।
জেফ উইডম্যান

@ পিট্টো এটিই আমি খুঁজছিলাম। প্রকৃতপক্ষে এসকিউএএলএলচেমি ইভেন্ট সিস্টেমটি এর বেশিরভাগ অংশের জন্যই স্পট রয়েছে। ফ্লাস্ক-এসকিউএএলএলএকএলএমি অতিরিক্ত কখনও ব্যবহার করেন নি। কেবলমাত্র একটি নমুনা অ্যাপ্লিকেশন ব্যবহার করছে। হতাশার সতর্কতা তৈরি করতে টিমকে কুডোস। সত্যিই সহায়ক। app.config ['SQLALCHEMY_TRACK_MODIFICATIONS'] = মিথ্যা
ডগল

7

উপরের উত্তরগুলি দেখতে ভাল লাগবে। তবে, আমি এই লাইনটি ফ্লাস্ক-এসকিউএএলএলএকএলএমি ডকুমেন্টেশনে উল্লেখ করতে চেয়েছিলাম কারণ SQLALCHEMY_TRACK_MODIFICATIONS = Falseআমার অ্যাপ্লিকেশন কনফিগারেশনে সেট করার পরেও আমি এই সতর্কতাগুলি পাচ্ছিলাম ।

এই পৃষ্ঠায়: http://flask-sqlalchemy.pocoo.org/2.3/config/

ফ্ল্যাস্ক-এসকিউএএলএলচেমির জন্য নিম্নলিখিত কনফিগারেশন মানগুলি বিদ্যমান। ফ্লাস্ক-এসকিউএএচএলএলচেমি আপনার মূল ফ্লাস্ক কনফিগারেশন থেকে এই মানগুলি লোড করে যা বিভিন্ন উপায়ে জনবহুল হতে পারে। নোট করুন যে ইঞ্জিনটি তৈরি হওয়ার পরে তাদের মধ্যে কিছু সংশোধন করা যাবে না তাই যত তাড়াতাড়ি সম্ভব কনফিগার করতে এবং রানটাইমে এগুলি সংশোধন না করার বিষয়ে নিশ্চিত হন।

অন্য কথায়, আপনার ফ্লাস্ক-এসকিউএএলএলএকচেমি ডাটাবেস তৈরি app.config করার আগে আপনার সেটআপটি নিশ্চিত করে নিন।

উদাহরণস্বরূপ, আপনি যদি নিজের অ্যাপ্লিকেশনটি সেট করতে কনফিগার করছেন SQLALCHEMY_TRACK_MODIFICATIONS = False:

from flask import Flask
app = Flask(__name__)
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.