কেস সংবেদনশীল ফ্লাস্ক-এসকিউএলএলএক্ল্যামি ক্যোয়ারী


98

আমি ব্যবহারকারীদের একটি ডাটাবেস থেকে জিজ্ঞাসা করতে ফ্লাস্ক-এসকিউএলএলকেমি ব্যবহার করছি; তবে, যখন

user = models.User.query.filter_by(username="ganye").first()

ফিরে আসবে

<User u'ganye'>

করছেন

user = models.User.query.filter_by(username="GANYE").first()

প্রত্যাবর্তন

None

আমি ভাবছি যে কোনও ক্ষেত্রে সংবেদনশীল উপায়ে ডাটাবেসকে জিজ্ঞাসা করার কোনও উপায় আছে, যাতে দ্বিতীয় উদাহরণটি আবার ফিরে আসবে

<User u'ganye'>

উত্তর:


200

আপনি আপনার ফিল্টারের মধ্যে lowerবা upperফাংশনগুলি ব্যবহার করে এটি করতে পারেন :

from sqlalchemy import func
user = models.User.query.filter(func.lower(User.username) == func.lower("GaNyE")).first()

আরেকটি বিকল্প ব্যবহার করে অনুসন্ধানের করতে হয় ilikeপরিবর্তে like:

.query.filter(Model.column.ilike("ganye"))

4
এই filter_byব্যবহারকারীর নাম কলাম ইনডেক্স করা পদ্ধতির তুলনায় কোয়েরিটি ধীর করে দেবে?
ক্যাপ্টেনডাভিঞ্চি

13

@ প্লাজের উত্তরে উন্নতি করা, আপনি যদি প্রয়োজনীয় কলাম (গুলি) নির্দিষ্ট করে থাকেন তবে এটি একটিটিকে প্রশ্নের সংক্ষিপ্ত করে তুলবে:

user = models.User.query.with_entities(models.User.username).\
filter(models.User.username.ilike("%ganye%")).all()

উপরোক্ত উদাহরণে এক চাহিদা AJAX এর উদ্দেশ্যে এবং তারপর আপনার জাভাস্ক্রিপ্ট অ্যাক্সেস এটি ব্যবহার বোতল এর jsonify ব্যবহার করতে ক্ষেত্রে খুবই দরকারী data.result :

from flask import jsonify
jsonify(result=user)

@ ভেদরানিয়েগো আমি লিঙ্কটি দেখেছি, রেফারেন্সের জন্য ধন্যবাদ। আমি নিজের পরীক্ষাও করবো।
iChux

3

আপনি করতে পারেন

user = db.session.query(User).filter_by(func.lower(User.username)==func.lower("GANYE")).first()

অথবা আপনি ইলিকে ফাংশনটি ব্যবহার করতে পারেন

 user = db.session.query(User).filter_by(User.username.ilike("%ganye%")).first()

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