ফ্লাস্ক-স্ক্ল্যালেচি বা স্ক্ল্যাচমি


95

আমি ফ্লাস্ক এবং স্ক্ল্যাচলেমি উভয় ক্ষেত্রেই নতুন, আমি কেবল একটি ফ্লাস্ক অ্যাপ্লিকেশনটিতে কাজ শুরু করি এবং আমি আপাতত স্ক্ল্যাচলেমি ব্যবহার করছি। আমি ভাবছিলাম যে ফ্লাস্ক-স্ক্ল্যালেচেমি বনাম স্ক্লাচেমি ব্যবহার করে আমি কীভাবে লাভ করতে পারি? আমি http://packages.python.org/Flask-SQLAlchemy/index.html এ যথেষ্ট অনুপ্রেরণা খুঁজে পাইনি বা সম্ভবত আমি মানটি বুঝতে পারি নি !! আমি আপনার স্পষ্টির প্রশংসা করব।


6
হুম, এখনও এখানে সন্তোষজনক উত্তর নেই। ফ্ল্যাস্ক অ্যাপ্লিকেশনটিতে কী flask-sqlalchemyপুরানো sqlalchemyওষুধের প্রকৃত কংক্রিট সুবিধাগুলি কী তা ব্যাখ্যা করতে পারে ?
স্টিভ বেনেট

তবে একটি বড় অসুবিধা হ'ল Flask-SqlAlchemyঅ্যাপটিতে মাল্টি-টেন্যান্সি সেটআপের কোনও উপায় সরবরাহ করে না। এটি আইএমও সবচেয়ে বড় নেতিবাচক। bindsপ্রদান করা হ'ল বিভিন্ন মডেলকে বিভিন্ন ডাটাবেস সংযুক্ত করা, যখন একই মডেলের সাথে ভাড়াটে-নির্দিষ্ট ডেটাবেস ব্যবহার করার কোনও উপায় নেই।
রোহিত জৈন

উত্তর:


70

এর মূল বৈশিষ্ট্য Flask-SQLAlchemyহ'ল ফ্লাস্ক অ্যাপ্লিকেশনটির সাথে যথাযথ সংহতকরণ - এটি ইঞ্জিন, সংযোগ এবং সেশন তৈরি করে এবং এটি ফ্লাস্ক অ্যাপ্লিকেশনটির সাথে কাজ করার জন্য কনফিগার করে।

এই সেটআপ বেশ জটিল হিসাবে আমরা তৈরি করতে প্রয়োজন হয় বিশ্লেষণ করা অধিবেশন এবং সঠিকভাবে বোতল আবেদন অনুরোধ / প্রতিক্রিয়া জীবনচক্র অনুযায়ী এটি পরিচালনা।

আদর্শ বিশ্বে Flask-SQLAlchemyএটির একমাত্র বৈশিষ্ট্য হবে তবে বাস্তবে এটি আরও কয়েকটি জিনিস যুক্ত করে। এগুলির ওভারভিউ সহ একটি ভাল ব্লগ পোস্ট এখানে দেওয়া হয়েছে: ফ্লাস্ক-এসকিউএএএলএলএকচেমিকে অপমান করা

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

সুতরাং সহজ পদ্ধতির (যা আমি কাজ করছি এমন অন্য প্রকল্পে ব্যবহৃত হয়) তা হল কেবল ড্রপ ফেলে দেওয়া Flask-SQLAlchemyএবং এটি সরবরাহ করে এমন কোনও অতিরিক্ত বৈশিষ্ট্য ব্যবহার না করা। আপনার কাছে রয়েছে db.sessionএবং আপনি এটি ব্যবহার করতে পারেন যেন এটি খাঁটি SQLAlchemyসেটআপ ছিল ।


4
আমি বিভ্রান্ত থাকি। লিঙ্কযুক্ত ব্লগ পোস্ট (এবং অফিসিয়াল ডক্স!) কিছু সরল এসকিউএএলএলচেমি বৈশিষ্ট্য তালিকাভুক্ত করেছে (ঘোষণামূলক বেসের মতো) যেন এগুলি ফ্লাস্ক-এসকিউএএএলএলএকেমি বৈশিষ্ট্য; তারা এসকিউএএলএলচেমিতে তৈরি সামগ্রীর জন্য ক্রেডিট নিচ্ছে কিনা তা তারা স্পষ্ট নয় বা তারা এটি পুনরায় প্রয়োগ করেছে (বা কেন তারা এটি করেছে, যদি এটি পরে থাকে)। আপনার প্রথম অনুচ্ছেদে দুটি বৈশিষ্ট্য তালিকাভুক্ত করা হয়েছে: সেশন ম্যানেজমেন্টের জন্য সুবিধাযুক্ত মোড়ক (তবে যদি আপনি ফ্লাস্কের বাইরে আপনার এসকিএএলএলএইচএই মডেলগুলি ব্যবহার করতে চান তবে আপনার নিজের রোল করার দরকার হবে না ?) এবং " ফ্লাস্ক অ্যাপের সাথে কাজ করতে " কিছু অনির্ধারিত "কনফিগারেশন " । তার মানে কী ?
মার্ক আমেরি

4
প্রশ্নে আমিও কিছুটা বিভ্রান্ত হয়ে পড়েছি। লিঙ্কযুক্ত ব্লগ পোস্টটি বেশ পরিষ্কার আইএমও, উদাহরণস্বরূপ, এটি বলেছে যে "কাস্টম সম্পত্তি এবং পৃষ্ঠাগুলির জন্য সমর্থন সহ কাস্টম ডিক্লেয়ারেশনাল বেস মডেল" কীটি "কাস্টম" এবং "ক্যোয়ারীর সম্পত্তি এবং পৃষ্ঠাগুলির জন্য সমর্থন সহ" এটি এটি শীর্ষে যুক্ত করেছে এসকিউএলএলচেমির ঘোষণার ভিত্তি।
বরিস সেরেব্রভ

4
"সুবিধাযুক্ত মোড়ক" সম্পর্কিত - এগুলি সুবিধার জন্য নয়, তবে জিনিসগুলি সঠিকভাবে কাজ করার জন্য। এসকিউএএলএলচেমি ব্যবহার শুরু করার জন্য আপনার ডাটাবেস সংযোগ (এনইঞ্জ / সংযোগ / সেশন) অবজেক্টগুলির প্রয়োজন এবং আপনি যখনই এসকিউএল কোয়েরি তৈরি করতে চান তখন আপনি এগুলি তৈরি করতে চান না, তাই এগুলি অ্যাপ্লিকেশন কোড জুড়ে বিশ্বব্যাপী তৈরি করা উচিত এবং আভিজাতীয়। সুতরাং আপনি এই "ডিবি" অবজেক্টটি কীভাবে সঠিকভাবে তৈরি এবং সূচনা করতে পারেন তা ভেবে "" ইউরপ্লিকেশন আমদানি ডিবি থেকে "এবং তারপরে" db.session.something () "এর মতো কিছু করতে পারেন।
বোরিস সেরেব্রভ

এবং "ফ্লাস্ক অ্যাপ্লিকেশনটির সাথে কাজ করার" জন্য অনির্দিষ্ট "কনফিগারেশন" সম্পর্কিত - এটি দ্বিতীয় অনুচ্ছেদে প্রকৃতপক্ষে নির্দিষ্ট করা হয়েছে: This setup is quite complex as we need to create the scoped session and properly handle it according to the Flask application request/response life-cycle.এসকিউএএলএলএকমি ডক্সে আরও বিশদটি দেখুন: আমি কখন একটি সেশন তৈরি করব, কখন করব এবং কখন করব? এটা বন্ধ করুন? এবং প্রাসঙ্গিক / থ্রেড-স্থানীয় সেশনস
বরিস সেরেব্রভ

22

ফ্লাস্ক-এসকিউএএলএলকেমি আপনাকে অনেকগুলি অতিরিক্ত অতিরিক্ত দেয় আপনি অন্যথায় এসকিউএলএলকেমি ব্যবহার করে নিজেকে বাস্তবায়ন করতে চান।

ফ্লাস্ক-এসকিউএএএলএলএলকেমি ব্যবহারের পক্ষে ইতিবাচক দিক


  1. ফ্লাস্ক_স কিউএলএলচেমি আপনার জন্য সেশন কনফিগারেশন, সেটআপ এবং টিয়ারডাউন পরিচালনা করে।
  2. আপনাকে ঘোষণামূলক বেস মডেল দেয় যা অনুসন্ধান এবং পৃষ্ঠাগুলি আরও সহজ করে
  3. ব্যাকএন্ড সুনির্দিষ্ট সেটিংস kফ্লাস্ক-এসকিউএএলএলচেমি ইউনিকোড সমর্থনের জন্য ইনস্টল করা লিবগুলি স্ক্যান করে এবং যদি ব্যর্থ হয় তবে স্বয়ংক্রিয়ভাবে এসকিএএলএলচেমি ইউনিকোড ব্যবহার করে।
  4. এমন একটি পদ্ধতি রয়েছে যা apply_driver_hacksমাইএসকিউএল পুল-আকারের মতো থিংসে স্বয়ংক্রিয়ভাবে বুদ্ধিমান ডিফল্ট সেট করে
  5. সমস্ত টেবিল তৈরি এবং ফেলে দেওয়ার জন্য পদ্ধতিগুলি তৈরি_ল () এবং ড্রপ_ল () -তে দুর্দান্ত বিল্ড রয়েছে। যদি আপনি বোকা কিছু করেন তবে পরীক্ষার জন্য এবং পাইথন কমান্ড লাইনে দরকারী
  6. এটি আপনাকে () এর পরিবর্তে get_or_404 () এবং সন্ধান_র_404 () সন্ধানের () কোডের উদাহরণ>> http://flask-sqlalchemy.pocoo.org/2.1/queries/ এ দেয়

স্বয়ংক্রিয়ভাবে টেবিলের নাম সেট করুন। ফ্লাস্ক-এসকিউএএইচএলএলচেমি স্বয়ংক্রিয়ভাবে আপনার টেবিলের নামগুলি আপনার রূপান্তর করে ClassName> class_nameএটি __tablename__শ্রেণীর তালিকা আইটেমটি সেট করে ওভাররাইড করা যেতে পারে

ফ্লাস্ক-এসকিউএএলএলএকচেমি ব্যবহারের নেতিবাচক দিকগুলি


  1. ফ্ল্যাশ-এসকিউএএলএলএকলেমি ব্যবহার করে ফ্ল্যাশ থেকে মাইগ্রেশন করার ক্ষেত্রে অতিরিক্ত অসুবিধা তৈরি করবে আপনার যদি প্রয়োজন হয় তবে পিরামিড বলতে দিন। এটি মূলত ফ্লাস্কস কিউএলএইচিতে কাস্টম ঘোষিত বেস মডেলের কারণে।
  2. ফ্লাস্ক-এসকিউএএলএলকেমি ব্যবহার করে আপনি নিজেই এসকিউএলএলচেমির চেয়ে অনেক ছোট সম্প্রদায়ের সাথে একটি প্যাকেজ ব্যবহার করার ঝুঁকি নিয়ে যান, যা আমি খুব শীঘ্রই সক্রিয় উন্নয়ন থেকে খুব শীঘ্রই ছাড়তে পারি না।
  3. ফ্লাস্ক-এসকিউএএলএলএইচএলএমি কিছু চমৎকার অতিরিক্ততা আপনাকে বিভ্রান্ত করতে পারে যদি আপনি জানেন না যে তারা সেখানে আছেন।

21

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


6
হ্যাঁ, আপনার ব্যবহারের ক্ষেত্রে ফ্লাস্ক-এসকিউএএলএলচেমি অপ্রচলিত বলে মনে হচ্ছে। তবে যদি ওপিতে এমন দৃশ্য দেখা যায় তবে তিনি সম্ভবত এই প্রশ্ন জিজ্ঞাসা করবেন না। নতুন ব্যবহারকারী যারা সেশন স্কোপ সম্পর্কে কিছুই জানেন না তাদের জন্য অবশ্যই ফ্লাস্ক-এসকিউএএলএলকেমি অবশ্যই আবশ্যক!
স্ক্লামার

16

এসকিউএএলএলকেমি ডকুমেন্টেশনে স্পষ্টভাবে বলা হয়েছে যে আপনার ফ্লাস্ক-এসকিউএএলএলচেমি ব্যবহার করা উচিত (বিশেষত যদি আপনি এর সুবিধাগুলি বুঝতে না পারেন!):

[...] ফ্লাস্ক-এসকিউএএলএলচেমির মতো পণ্যগুলি [...] এসকিউএলএলচেমির দৃ strongly়ভাবে পরামর্শ দেয় যে এই পণ্যগুলি উপলব্ধ হিসাবে ব্যবহার করা উচিত।

এই উদ্ধৃতি এবং একটি বিস্তারিত অনুপ্রেরণা আপনি সেশন FAQ এর দ্বিতীয় প্রশ্নে খুঁজে পেতে পারেন ।


4
ফ্লাস্ক-স্ক্ল্যাচেমি মনে হয় অযৌক্তিক। সর্বশেষ আপডেটটি ছিল 2013 সালের 1 আগস্টে this এই পরামর্শটি কি আর প্রাসঙ্গিক?
pmav99

@ pmav99 যতক্ষণ না আপনার সাথে কংক্রিট সংক্রান্ত সমস্যা না থাকে আমি ততক্ষণে এটির সুপারিশ করব বিশেষত নতুন ব্যবহারকারীদের জন্য।
স্ক্লামার

4
2014 সালের নভেম্বর পর্যন্ত সক্রিয়ভাবে রক্ষণাবেক্ষণ করা হবে বলে মনে হচ্ছে recent প্রচুর সাম্প্রতিক কমিট। github.com/mitsuhiko/flask-sqlalchemy/commits/master
স্টিভ বেনেট

26
যদিও ওপি সরাসরি এটি জিজ্ঞাসা করেনি, ইমো। তিনি ফ্লাস্ক-এসকিউএএলএলএক্লিমির সুবিধা কী তা জানতে চেয়েছিলেন। আপনার উত্তরটি আক্ষরিকভাবে "এটি কী কী উপকারগুলি তা জানেন না এমনকি তা ব্যবহার করুন" - হ্যাঁ, কী কী সুবিধা রয়েছে?
মার্কাস মেসকেনেন

4
এই উত্তরটি ওপির প্রশ্নের উত্তর দেয় না। আপনি ফ্ল্যাশ-স্ক্ল্যাচেমি সুপারিশ করছেন, সুপারিশের পিছনে অনেক যুক্তি সরবরাহ করুন।
mbadawi23

7

@ স্ক্লামার যেমন পরামর্শ দিয়েছেন ফ্লাস্ক-স্ক্ল্যাএলচেমি একটি ভাল জিনিস ডিফো করছে। আইডি কেবল সেখানে তৈরি পয়েন্টটিতে কিছু অতিরিক্ত প্রসঙ্গ যুক্ত করতে চাই।

আপনি একে অপরকে বেছে নিচ্ছেন বলে মনে করবেন না। উদাহরণস্বরূপ বলা যাক আমরা ফ্ল্যাশ-স্ক্ল্যাচলেমি ব্যবহার করে কোনও টেবিল থেকে সমস্ত রেকর্ড দখল করতে চাই। এটি হিসাবে সহজ

Model.query.all()

অনেকগুলি সাধারণ ক্ষেত্রে ফ্লাস্ক-স্ক্ল্যাচেমি সম্পূর্ণরূপে ঠিক থাকবে। আমি যে অতিরিক্ত পয়েন্টটি তৈরি করতে চাই তা হ'ল, যদি ফ্লাস্ক-স্ক্ল্যাচেমি আপনি যা করতে চান তা না করে তবে আপনি সরাসরি স্ক্যালএলকেমি ব্যবহার করতে পারবেন না এমন কোনও কারণ নেই।

from myapp.database import db

num_foo = db.session.query(func.count(OtherModel.id)).filter(is_deleted=False).as_scalar()

db.session.query(Model.id, num_foo.label('num_foo')).order_by('num_foo').all()

আপনি দেখতে পাচ্ছেন যে আমরা সহজেই কোনও ঝামেলা ছাড়াই একজন থেকে অন্যটিতে ঝাঁপিয়ে পড়তে পারি এবং দ্বিতীয় উদাহরণে আমরা আসলে ফ্লাস্ক-স্ক্ল্যাচলেমি সংজ্ঞায়িত মডেলগুলি ব্যবহার করি।


4
"উদাহরণস্বরূপ বলা যাক আমরা ফ্ল্যাশ-স্ক্ল্যাচলেমি ব্যবহার করে কোনও টেবিল থেকে সমস্ত রেকর্ড ধরতে চাই It এটি এত সহজ Model.query.all()" - এটি সবই কেবল এসকিউএএলএলচেমি দিয়ে করা যেতে পারে , ফ্লাস্ক-এসকিউএলএলচেমি ব্যবহার করে এখানে একেবারেই নতুন কিছু সরবরাহ করা যায় না।
মার্কাস মেসকেনেন

তুমি দারুন! আমি এই পোস্টে হোঁচট খেয়েছি এবং এটি আমার একটি সমস্যা সমাধান করেছে। আমি অ্যানাকোন্ডা ইনস্টল করার পরে, কোনও কারণে স্বাভাবিক আপডেটগুলি কাজ করে না। থেকে পরিবর্তিত Model.query.all()করা db.session.query(Model).all()কিছু কারণে সেশন ট্র্যাক করার অনুমতি দেওয়া ও স্বাভাবিক আপডেট জন্য।
জেফ ব্লুমেল

2

এখানে ফ্ল্যাশ-স্ক্ল্যাচলেমি আপনাকে প্লেইন স্ক্ল্যাচলেমি থেকে উপকারের একটি উদাহরণ দেয়।

মনে করুন আপনি ফ্লাস্ক_উজার ব্যবহার করছেন।

flask_user ব্যবহারকারীর অবজেক্টগুলির তৈরি এবং প্রমাণীকরণ স্বয়ংক্রিয় করে তোলে, সুতরাং এটি আপনার ডাটাবেস অ্যাক্সেস করা প্রয়োজন। ক্লাসের ইউজারম্যানেজার এটি করে "অ্যাডাপ্টার" নামক কোনও কিছুকে কল করে যা ডাটাবেস কলগুলি বিমূর্ত করে। আপনি ইউজারম্যানেজার কনস্ট্রাক্টরে একটি অ্যাডাপ্টার সরবরাহ করেন এবং অ্যাডাপ্টারের অবশ্যই এই ফাংশনগুলি প্রয়োগ করতে হবে:

class MyAdapter(DBAdapter):
    def get_object(self, ObjectClass, id):
        """ Retrieve one object specified by the primary key 'pk' """
        pass

    def find_all_objects(self, ObjectClass, **kwargs):
         """ Retrieve all objects matching the case sensitive filters in 'kwargs'. """
        pass


    def find_first_object(self, ObjectClass, **kwargs):
        """ Retrieve the first object matching the case sensitive filters in 'kwargs'. """
        pass

    def ifind_first_object(self, ObjectClass, **kwargs):
        """ Retrieve the first object matching the case insensitive filters in 'kwargs'. """
        pass

    def add_object(self, ObjectClass, **kwargs):
        """ Add an object of class 'ObjectClass' with fields and values specified in '**kwargs'. """
        pass

    def update_object(self, object, **kwargs):
        """ Update object 'object' with the fields and values specified in '**kwargs'. """
        pass

    def delete_object(self, object):
        """ Delete object 'object'. """
        pass

    def commit(self):
        pass

আপনি যদি ফ্লাস্ক-স্ক্ল্যাচমি ব্যবহার করছেন তবে আপনি বিল্ট-ইন এসকিউএএলএলএকএলএমি অ্যাডাপ্টার ব্যবহার করতে পারেন। আপনি যদি স্কেলচেমি ব্যবহার করেন (ফ্ল্যাশ-স্ক্ল্যাচলেচি না) আপনি যে উপায়ে ডাটাবেসে সংরক্ষিত হয় সে সম্পর্কে (যেমন টেবিলের নাম হিসাবে) বিভিন্ন ধারণা তৈরি করতে পারে তাই আপনাকে নিজের অ্যাডাপ্টার শ্রেণি লিখতে হবে।

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