¿puedo crear una columna de cadena insensible a mayúsculas y minúsculas en sqlalchemy? Estoy usando sqlite, y hay una manera de hacerlo a través de DB cambiando la intercalación, pero quiero mantenerlo en sqlalchemy/python.Columnas de cadena insensibles a mayúsculas y minúsculas en SQLAlchemy?
Respuesta
SQLite sí permite NOCASE collation en los campos de texto:
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
y sqlalchemy tiene un operador de collation() en un esquema, pero no estoy seguro cuando se aplica.
SQLAlchemy no parece permitir las cláusulas COLLATE en la etapa de creación de tabla (DDL) de forma predeterminada, pero finalmente descubrí una forma de hacer que esto funcione en SQLAlchemy 0.6+. Desafortunadamente, implica un poco de subclases y decoración, pero es razonablemente compacto.
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
El nuevo tipo de cadena a continuación, se puede utilizar normalmente para la creación de tablas:
just_a_table = Table('table_name', metadata,
Column('case_insensitive', CI_String(8, collate='NOCASE'), nullable=False))
la esperanza que alguien encuentre esto útil!
En el SQLAlchemy 0.8, agregaron el parámetro de intercalación a todos los tipos de cadenas. La palabra clave COLLATE ahora es compatible con varios back-ends de db, incluidos MySQL, SQLite y Postgresql. Usted debe ser capaz de escribir algo como esto:
my_table = Table('table_name', meta, Column('my_column',
String(255, collate = 'NOCASE'), nullable=False))
- 1. ¿Conversión y sustitución de mayúsculas y minúsculas insensibles a Javascript?
- 2. URL insensibles a mayúsculas/minúsculas con mod_rewrite
- 3. Urls insensibles a mayúsculas/minúsculas para Django?
- 4. Comparación de cadenas insensibles a mayúsculas y minúsculas C++
- 5. búsquedas LDAP insensibles a mayúsculas
- 6. Comparación de cadenas insensibles a mayúsculas o minúsculas
- 7. Cadena insensible a mayúsculas y minúsculas :: find
- 8. PHP: parámetros insensibles a las mayúsculas
- 9. Diferencias insensibles a mayúsculas en Mercurial
- 10. Explotar una cadena en mayúsculas y minúsculas?
- 11. sustitución de cadena sensible a mayúsculas y minúsculas en Python
- 12. Buscar coincidencias de palabras insensibles a mayúsculas y minúsculas en una línea
- 13. Insensible a mayúsculas/minúsculas #define
- 14. Convertir a mayúsculas y minúsculas en Java
- 15. ¿Cómo puedo tener URLs insensibles a mayúsculas y minúsculas en Spring MVC con asignaciones anotadas?
- 16. ¿Cómo puedo convertir todas las columnas en mi base de datos a mayúsculas y minúsculas
- 17. ¿Cómo hacer consultas de filtro insensibles a mayúsculas y minúsculas con Google App Engine?
- 18. make tags insensibles a las mayúsculas y minúsculas con django-taggit
- 19. ¿Cómo se hace el reemplazo de cadenas insensibles a mayúsculas/minúsculas con expresiones regulares?
- 20. Cadena KeyedCollection Insensible a las mayúsculas y minúsculas
- 21. ¿Cómo hacer una insensible a insensibles a mayúsculas y minúsculas y sin acentos en Oracle 10gR2 y JPA?
- 22. css mayúsculas y minúsculas
- 23. Analizador-analizador Scala insensible a las mayúsculas y minúsculas
- 24. ¿Cómo mayúsculas y minúsculas en cada cadena de caracteres?
- 25. cadena LINQ contiene otra cadena insensible a mayúsculas/minúsculas
- 26. ordenación de lista insensible a mayúsculas y minúsculas, sin minúsculas?
- 27. insensibilidad a mayúsculas/minúsculas
- 28. ¿Cómo puede Ruby hacer esta tarea (búsqueda de cadenas insensibles a mayúsculas y reemplazar en Ruby)?
- 29. conversión de cadenas a mayúsculas y minúsculas en JSTL
- 30. ¿F es sensible a mayúsculas y minúsculas?
Nota: '' No collation' collate' –