ডিস্কেন্ডিং দ্বারা স্ক্ল্যালেচেমি অর্ডার?


424

descendingনীচের মতো একটি স্ক্ল্যাচলেমি কোয়েরিতে আমি কীভাবে অর্ডার ব্যবহার করতে পারি ?

এই কোয়েরিটি কাজ করে, তবে তাদের আরোহী ক্রমে ফিরিয়ে দেয়:

query = (model.Session.query(model.Entry)
        .join(model.ClassificationItem)
        .join(model.EnumerationValue)
        .filter_by(id=c.row.id)
        .order_by(model.Entry.amount) # This row :)
        )

যদি আমি চেষ্টা করি:

.order_by(desc(model.Entry.amount))

তারপর আমি পাবেন: NameError: global name 'desc' is not defined

উত্তর:


692

ঠিক একটি এফওয়াইআই হিসাবে, আপনি কলামের বৈশিষ্ট্য হিসাবেও সেগুলি নির্দিষ্ট করতে পারেন। উদাহরণস্বরূপ, আমি এটি করতে পারে:

.order_by(model.Entry.amount.desc())

এটি সুবিধাজনক যেহেতু এটি কোনও এড়ানো হয় importএবং আপনি এটি অন্য জায়গায় যেমন কোনও সম্পর্কের সংজ্ঞা ইত্যাদিতে ব্যবহার করতে পারেন

আরও তথ্যের জন্য, আপনি এটি উল্লেখ করতে পারেন


28
এটি একটি এড়ানো import
ক্যাপী ইথেরিয়েল

1
এটির জন্য কোনও এআইপিআই রেফারেন্স রয়েছে, কী কী পাওয়া যায় তা জানতে পেরে শান্ত হবে?
জন মাইক

এই জন্য ধন্যবাদ। মনে হচ্ছে এটি অফিসিয়াল ডকুমেন্টেশন থেকে অনুপস্থিত।
ব্যবহারকারী3341078

1
সেরা প্রতিক্রিয়া (এই মুহূর্তে)
রড্রিকিং


338
from sqlalchemy import desc
someselect.order_by(desc(table1.mycol))

@ Jpmc26 থেকে ব্যবহার


15
ব্যবহার: someselect.order_by(desc(table1.mycol))( দস্তাবেজগুলি থেকে নেওয়া )) ... কারণ আমি কারও পক্ষে এটি আপনার প্রশ্নে লক্ষ্য করি নি।
jpmc26

1
দস্তাবেজের একটি নতুন url রয়েছে
হিউজেস

73

আর একটি জিনিস আপনি করতে পারেন:

.order_by("name desc")

এর ফলস্বরূপ হবে: নাম ডেস্কের মাধ্যমে অর্ডার। অসুবিধাটি হ'ল সুস্পষ্ট কলামের নাম দ্বারা ক্রমে ব্যবহৃত।


25
এটি একটি সম্ভাব্য ভঙ্গুর workaround যেখানে একটি workaround প্রয়োজন হয় না।
ব্লুবম্বার

13
যদি আপনার কোনও কারণে স্ট্রিংয়ে বাছাই করা কলাম থাকে তবে এটি দুর্দান্ত (যদিও কোনও ওয়েব এপিআইতে স্যানিটাইজড ইনপুট)।
জিম স্টুয়ার্ট

19
ফলোআপ হিসাবে, আপনার getattr(MyModelClass, column_string).desc()স্ট্রিং থাকলে আপনি এটি করতেও পারেন।
জিম স্টুয়ার্ট 21

9
@ জিমস্টেওয়ার্ট এবং দিক দিয়ে যাওয়ার জন্য আমি qry.order_by(getattr(getattr(Song, sort_by), sort_dir)())
এইটি

1
আপনি যদি আপনার আউটপুট লেবেলযুক্ত করে থাকেন এবং কোনও মডেল কলামের পরিবর্তে গণিত কলাম অনুসারে বাছাই করেন তবে আপনি এটিও ব্যবহার করতে পারেন
বোটকোডার

28

আপনি .desc()আপনার ক্যোয়ারিতে ঠিক এভাবে ফাংশন ব্যবহার করতে পারেন

query = (model.Session.query(model.Entry)
        .join(model.ClassificationItem)
        .join(model.EnumerationValue)
        .filter_by(id=c.row.id)
        .order_by(model.Entry.amount.desc())
        )

এটি ক্রমবর্ধমান ক্রমের পরিমাণ অনুসারে অর্ডার করবে বা

query = session.query(
    model.Entry
).join(
    model.ClassificationItem
).join(
    model.EnumerationValue
).filter_by(
    id=c.row.id
).order_by(
    model.Entry.amount.desc()
)
)

এসকিউএএলএলচেমির ডেস্ক ফাংশন ব্যবহার

from sqlalchemy import desc
query = session.query(
    model.Entry
).join(
    model.ClassificationItem
).join(
    model.EnumerationValue
).filter_by(
    id=c.row.id
).order_by(
    desc(model.Entry.amount)
)
)

অফিসিয়াল ডক্সের জন্য দয়া করে লিঙ্কটি ব্যবহার করুন বা স্নিপেটের নীচে চেক করুন

sqlalchemy.sql.expression.desc (কলাম) ক্লজ উপাদান দ্বারা একটি উতরিত অর্ডার উত্পাদন করে।

উদাহরণ:

from sqlalchemy import desc

stmt = select([users_table]).order_by(desc(users_table.c.name))

এসকিউএল উত্পাদন করবে:

SELECT id, name FROM user ORDER BY name DESC

ডেস্ক () ফাংশনটি সমস্ত এসকিউএল এক্সপ্রেশনগুলিতে উপলব্ধ কলামোনমেন্ট.ডেস্ক () পদ্ধতির একটি স্বতন্ত্র সংস্করণ, যেমন:

stmt = select([users_table]).order_by(users_table.c.name.desc())

পরামিতি কলাম - একটি কলামিলেমেন্ট (যেমন স্কেলার এসকিউএল এক্সপ্রেশন) যার সাহায্যে ডেস্ক () অপারেশন প্রয়োগ করতে হবে।

আরো দেখুন

উচ্চক্রমে ()

nullsfirst ()

nullslast ()

Select.order_by ()


5
কিভাবে এই না সদৃশ stackoverflow.com/a/4187279/2718295
cowbert

12

আপনি চেষ্টা করতে পারেন: .order_by(ClientTotal.id.desc())

session = Session()
auth_client_name = 'client3' 
result_by_auth_client = session.query(ClientTotal).filter(ClientTotal.client ==
auth_client_name).order_by(ClientTotal.id.desc()).all()

for rbac in result_by_auth_client:
    print(rbac.id) 
session.close()

0

@ রাদুর উত্তর পরিপূরক, এসকিউএল হিসাবে, আপনি যদি একই বৈশিষ্ট্যযুক্ত অনেকগুলি টেবিল থাকে তবে আপনি প্যারামিটারে টেবিলের নাম যুক্ত করতে পারেন।

.order_by("TableName.name desc")

এর জন্য কি পাঠ্য () দ্বারা স্ট্রিং মোড়ানো প্রয়োজন হয় না?
গ্লুটেক্সো

সাবধানতা অবলম্বন করে এটি এসকিউএলএলমি>> ১.৩ এ ত্রুটি সৃষ্টি করে, নিম্ন সংস্করণগুলিতে একটি সতর্কতা
চেকো আর
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.