স্ক্যালকিমি নির্বাচন করা হয় না


108

নির্দিষ্ট কলাম থেকে শূন্য নয় এমন মানগুলি নির্বাচন করতে আমি কীভাবে এসকিউএল হিসাবে ফিল্টার যুক্ত করতে পারি?

SELECT * 
FROM table 
WHERE YourColumn IS NOT NULL;

এসকিউএএলএলএকমি ফিল্টারগুলির সাথে আমি কীভাবে একই কাজ করতে পারি?

select = select(table).select_from(table).where(all_filters) 

all_filtersএখানে কি ? কেন select_from?
মার্টিজন পিটারস

এবং আপনার কি কোনও সারণি সংজ্ঞা আছে বা আপনার কলামের আক্ষরিক ব্যবহার প্রয়োজন?
মার্টিজন পিটারস

উত্তর:


144

column_obj != NoneIS NOT NULLবাধা সৃষ্টি করবে :

একটি কলাম প্রসঙ্গে, ধারাটি উত্পাদন করে a != b। লক্ষ্যটি হলে None, উত্পাদন করে a IS NOT NULL

বা ব্যবহার করুন isnot()(0.7.9 এ নতুন):

IS NOTঅপারেটর প্রয়োগ করুন ।

সাধারণত, IS NOTএকটি মানটির সাথে তুলনা করার সময় স্বয়ংক্রিয়ভাবে উত্পন্ন হয় Noneযা সমাধান হয় NULL। তবে IS NOTনির্দিষ্ট প্ল্যাটফর্মগুলিতে বুলিয়ান মানগুলির সাথে তুলনা করা হলে এর সুস্পষ্ট ব্যবহার বাঞ্ছনীয় হতে পারে।

ডেমো:

>>> from sqlalchemy.sql import column
>>> column('YourColumn') != None
<sqlalchemy.sql.elements.BinaryExpression object at 0x10c8d8b90>
>>> str(column('YourColumn') != None)
'"YourColumn" IS NOT NULL'
>>> column('YourColumn').isnot(None)
<sqlalchemy.sql.elements.BinaryExpression object at 0x104603850>
>>> str(column('YourColumn').isnot(None))
'"YourColumn" IS NOT NULL'

9
"কি কেউ নয়" একই আউটপুট উত্পাদন করে?
ব্রীজার

23
@Breezer: না, কারণ isকাস্টম শ্রেণীর দ্বারা ওভারলোড করা যাবে না উপায় !=হতে পারে।
মার্টিজন পিটারস

4
অন্য উত্তরটি এখন পছন্দসই উত্তর; এটি পাইকার্ম সহ অনেক আইডিই সতর্কতা উত্পন্ন করা থেকে বিরত থাকে।
আন্তি হাপাল

@ আন্টিহাপালা: আমি নিশ্চিত নই যে এটি 'পছন্দসই' আছে কিনা। এসকিউএএলএলএকমি ডকুমেন্টেশন বুলিয়ানদের আরও গুরুত্বপূর্ণ ইউজকেস হিসাবে উল্লেখ করেছে। আমি এই বিকল্পটি যুক্ত করেছি।
মার্টিজন পিটারস

107

0.7.9 সংস্করণে শুরু করে আপনি .isnotসীমাবদ্ধতার তুলনার পরিবর্তে ফিল্টার অপারেটরটি ব্যবহার করতে পারেন :

query.filter(User.name.isnot(None))

এই পদ্ধতিটি কেবল তখনই প্রয়োজনীয় যখন pep8 উদ্বেগজনক।

উত্স: স্ক্যালচেমি ডকুমেন্টেশন


4
পেপ 8 কে খুশি করা ছাড়াও, আমি মনে করি এটি একটি আরও ভাল সমাধান কারণ এসকিউএল NULLএর আরএইচএস হিসাবে বৈধ নয় !=এবং isnotআপনি উত্পন্ন বিবৃতিটি দেখতে কেমন চান তার জন্য আপনার উদ্দেশ্যগুলি আরও ভালভাবে জানায়।
জোশ

4
@ জোশ: এসকিউএলএলচেমি প্রসারণ করবে না != NULL, আপনি column != Noneপাইথনের পাশে ব্যবহার করলেও; আপনি পেতে IS NOT NULL। ব্যবহার .isnot()আপনাকে তবে অন্য ধরণের উপর চাপ দিতে দেয় IS NOT( .isnot(True)উদাহরণস্বরূপ বুলিয়ান কলামগুলির বিরুদ্ধে চিন্তা করুন )।
মার্টিজন পিটারস

47

অন্য কেউ যদি ভাবছেন, আপনি is_উত্পন্ন করতে ব্যবহার করতে পারেন foo IS NULL:

>>> sqlalchemy.sql আমদানি কলাম থেকে
>>> মুদ্রণ কলাম ('foo')। is_ (কিছুই নয়)
foo নিল
>>> মুদ্রণ কলাম ('foo')। isnot (কিছুই নয়)
foo বাতিল হয় না

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