sqlalchemy'de büyük/küçük harf duyarsız bir dize sütunu oluşturabilir miyim? sqlite kullanarak im, ve probaby, harmanlamayı değiştirerek DB aracılığıyla bunu yapmak için bir yol, ama ben sqlalchemy/python içinde tutmak istiyorum.Büyük/küçük harf duyarsız dize sütunları?
6
A
cevap
2
SQLite metin alanları üzerinde NOCASE collation izin yapar:
SQLite version 3.6.22
sqlite> create table me (name text collate nocase);
sqlite> .schema
CREATE TABLE me (name text collate nocase);
sqlite> insert into me values("Bob");
sqlite> insert into me values("alice");
sqlite> select * from me order by name;
alice
Bob
ve sqlalchemy bir şema üzerinde collation() bir operatör var, ancak bunu uyguladığınızda emin değilim.
4
SQLAlchemy varsayılan olarak tablo oluşturma (DDL) aşamasında COLLATE maddelerine izin vermiyor gibi görünüyor, ancak sonunda SQLAlchemy 0.6+ üzerinde çalışmanın bir yolunu buldum. Ne yazık ki, biraz alt sınıflandırma ve dekorasyon gerektirir, ancak oldukça kompakttır.
from sqlalchemy import *
from sqlalchemy.ext.compiler import compiles
from sqlalchemy.types import TypeDecorator
class CI_String(TypeDecorator):
""" Case-insensitive String subclass definition"""
impl = String
def __init__(self, length, **kwargs):
if kwargs.get('collate'):
if kwargs['collate'].upper() not in ['BINARY','NOCASE','RTRIM']:
raise TypeError("%s is not a valid SQLite collation" % kwargs['collate'])
self.collation = kwargs.pop('collate').upper()
super(CI_String, self).__init__(length=length, **kwargs)
@compiles(CI_String, 'sqlite')
def compile_ci_string(element, compiler, **kwargs):
base_visit = compiler.visit_string(element, **kwargs)
if element.collation:
return "%s COLLATE %s" % (base_visit, element.collation)
else:
return base_visit
yeni dize tip
sonra tabloları oluşturmak için normal olarak kullanılabilir:just_a_table = Table('table_name', metadata,
Column('case_insensitive', CI_String(8, collate='NOCASE'), nullable=False))
Umut birisi bu yararlı bulur!
3
SQLAlchemy 0.8'de, tüm String türlerine harmanlama parametresi eklediler. COLLATE anahtar sözcüğü artık MySQL, SQLite ve Postgresql gibi çeşitli db arka uçlarıyla destekleniyor.
my_table = Table('table_name', meta, Column('my_column',
String(255, collate = 'NOCASE'), nullable=False))
İlgili konular
- 1. Büyük/küçük harf duyarsız dize karşılaştırması C++
- 2. Büyük/küçük harf duyarsız dize karşılaştırması
- 3. PHP harf duyarsız patlayabilir()
- 4. Lua'daki büyük harf duyarsız dizi
- 5. String.Contains nasıl büyük harf duyarsız?
- 6. LINQ dizesi başka bir dize büyük/küçük harf duyarsız içeriyor
- 7. LINQ'da büyük/küçük harf duyarsız bir dize Eşleştirme
- 8. iTerm2 tetikleyici büyük/küçük harf duyarsız
- 9. Büyük/küçük harf duyarsız argparse seçimleri
- 10. XML Şema Vaka Basit Tip Dize için Duyarsız Sayım
- 11. Dize bir dizi içinde herhangi bir öğe içeriyor (büyük harf duyarsız)
- 12. SQLite (C/C++) için büyük/küçük harf duyarsız UTF-8 dize harmanlama
- 13. Objektif duyarsız dize objektif-c iphone nasıl değiştirilir?
- 14. Bir değişkeni için .search() büyük/küçük harf duyarsız
- 15. Java DB'de (Derby) büyük/küçük harf duyarsız arama
- 16. Bir diziden dizeler için büyük/küçük harf duyarsız NSPredicate?
- 17. Java küçük harf duyarsız regex eşleştirme çalışmıyor ile yazmak Ñ
- 18. Oracle tablo isimleri büyük/küçük harf duyarsız nasıl yapılır?
- 19. Linq to Sql büyük/küçük harf duyarsız eşitlik
- 20. XSLT - küçük harf basit bir dize var
- 21. Javascript: Bir dize sesli harf sayma
- 22. Davaya duyarsız Dinamik Linq İçerir
- 23. Bir alt dizgi aksama duyarsız için bir dize arama
- 24. büyük harf duyarlı arama neo4j
- 25. JavaScript regex yalnızca harf, boşluk kabul etmek ve ñ
- 26. Vim'de büyük/küçük harf duyarsız f tuşu? Ben satırın başında isem
- 27. Harf Duyarlı Dava duyarsız bakmak-up yapmak sözlükleri mümkün yapma konusunda internet üzerinde bilgi bol buldum
- 28. Sütunları
- 29. vurgu duyarsız düzenli ifade
- 30. Ayrıştırıcı JSoup küçük harf harf
Not: Böyle bir şey yazmak mümkün olmalıdır 'değil collation'' collate' –