আমার একটি এসকিউএএলএলচেমি ডাটাবেস এর idঅনুরূপ কিছু দ্বারা জিজ্ঞাসা করা দরকার
User.query.filter_by (ব্যবহারকারীর নাম = 'পিটার')
তবে আইডির জন্য আমি এটা কিভাবে করবো? [গুগল এবং এসও অনুসন্ধান করে কোনও লাভ হয়নি]
আমার একটি এসকিউএএলএলচেমি ডাটাবেস এর idঅনুরূপ কিছু দ্বারা জিজ্ঞাসা করা দরকার
User.query.filter_by (ব্যবহারকারীর নাম = 'পিটার')
তবে আইডির জন্য আমি এটা কিভাবে করবো? [গুগল এবং এসও অনুসন্ধান করে কোনও লাভ হয়নি]
উত্তর:
ক্যোয়ারির একটি গেম ফাংশন রয়েছে যা টেবিলের প্রাথমিক কী দ্বারা অনুসন্ধান করা সমর্থন করে, যা আমি ধরে নিই idis
উদাহরণস্বরূপ, 23 আইডি সহ কোনও অবজেক্টের জন্য জিজ্ঞাসা করা:
User.query.get(23)
দ্রষ্টব্য: আরও কয়েক জন মন্তব্যকারী এবং উত্তর উল্লেখ করেছেন, এটি "প্রাথমিক কীতে কোনও ক্যোয়ারী ফিল্টারিং সম্পাদন করুন" এর জন্য কেবল সংক্ষিপ্ত নয়। এসকিউএএলএলএকমি সেশনের অবস্থার উপর নির্ভর করে, এই কোডটি চালানো ডাটাবেসটিকে জিজ্ঞাসা করতে পারে এবং একটি নতুন উদাহরণ ফিরে আসতে পারে, বা এটি আসলে আপনার ডাটাবেসে অনুসন্ধান না করেই আপনার কোডে কোয়েড করা কোনও অবজেক্টের উদাহরণ ফিরে আসতে পারে। আপনি যদি ইতিমধ্যে এটি না করে থাকেন, তবে এসএমএইচএলএলএক্লেমি সেশনে ডকুমেন্টেশন পড়ার বিষয়টি বিবেচনা করুন ।
YourModel.query.get((pk1, pk2))। টিপল লক্ষ্য করুন।
আপনি এই জাতীয় ID = 1 দিয়ে কোনও ব্যবহারকারীকে জিজ্ঞাসা করতে পারেন
session.query(User).get(1)
get () কখনও কখনও আপনার প্রত্যাশিত হিসাবে হয় না:
যদি আপনার লেনদেন হয়:
>>> session.query(User).get(1)
[SQL]: BEGIN (implicit)
[SQL]: SELECT user.id AS user_id, user.name AS user_name, user.fullname AS user_fullname
FROM user
WHERE user.id = ?
[SQL]: (1,)
<User(u'ed', u'Ed Jones')>
আপনি যদি কোনও লেনদেনে থাকেন (পান () আপনাকে ডাটাবেসকে জিজ্ঞাসা না করে মেমরিতে ফলাফল অবজেক্ট দেবে):
>>> session.query(User).get(1)
<User(u'ed', u'Ed Jones')>
এটি ব্যবহার করা ভাল:
>>> session.query(User.name).filter(User.id == 1).first()
[SQL]: SELECT user.name AS user_name
FROM user
WHERE user.id = ?
LIMIT ? OFFSET ?
[SQL]: (1, 1, 0)
(u'Edwardo',)
get()মনে হচ্ছে আপনাকে মেমোরিতে ফলাফল অবজেক্ট দেবে (আসলে ডাটাবেসটিকে জিজ্ঞাসা না করে), তবে filter().first()সবসময় ডাটাবেসটিকে জিজ্ঞাসা করবে।
getদক্ষতা বৃদ্ধির কারণে ব্যবহার করা ভাল।
getআরও কার্যকর।
আপনি যদি ব্যবহার tables reflectionকরেন তবে প্রদত্ত সমাধানগুলিতে আপনার সমস্যা হতে পারে। (এখানে পূর্ববর্তী সমাধানগুলি আমার পক্ষে কার্যকর হয়নি)।
আমি যা ব্যবহার করে শেষ করেছি তা হ'ল:
session.query(object._class_).get(id)
( objectডাটাবেস থেকে প্রতিবিম্ব দ্বারা পুনরুদ্ধার করা হয়েছিল, এই জন্য আপনার ব্যবহারের প্রয়োজন .__class__)
আশা করি এটা কাজে লাগবে.
প্রথমত, আপনাকে idপ্রাথমিক কী হিসাবে সেট করা উচিত ।
তারপরে আপনি সেই query.get()পদ্ধতিটি ব্যবহার করতে পারেন idযা ইতিমধ্যে প্রাথমিক কী দ্বারা অবজেক্টগুলিকে জিজ্ঞাসা করতে পারে ।
যেহেতু query.get()প্রাথমিক কী দ্বারা অবজেক্টগুলি জিজ্ঞাসা করার পদ্ধতি। ফ্লাস্ক-এসকিউএএলএলএকএলএমি ডকুমেন্টেশন
থেকে অনুগামী
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
db = SQLAlchemy()
db.init_app(app)
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
def test():
id = 1
user = User.query.get(id)