Tôi có thể tạo cột chuỗi phân biệt chữ hoa chữ thường trong sqlalchemy không? im sử dụng sqlite, và theres probaby một cách để làm điều đó thông qua DB bằng cách thay đổi collation, nhưng tôi muốn giữ nó trong sqlalchemy/python.Cột chuỗi phân biệt chữ hoa chữ thường trong SQLAlchemy?
Trả lời
SQLite không cho phép NOCASE collation trên các lĩnh vực văn bản:
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
và SQLAlchemy có một nhà điều hành collation() trên một lược đồ, nhưng tôi không chắc chắn khi bạn áp dụng nó.
SQLAlchemy dường như không cho phép các mệnh đề COLLATE ở giai đoạn tạo bảng (DDL) theo mặc định, nhưng cuối cùng tôi đã tìm ra cách để làm việc này trên SQLAlchemy 0.6+. Thật không may, nó liên quan đến một chút subclassing và trang trí, nhưng nó hợp lý nhỏ gọn.
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
Kiểu chuỗi mới sau đó có thể được sử dụng bình thường để tạo bảng:
just_a_table = Table('table_name', metadata,
Column('case_insensitive', CI_String(8, collate='NOCASE'), nullable=False))
Hope ai đó tìm thấy hữu ích này!
Trong SQLAlchemy 0.8, chúng thêm thông số đối chiếu vào tất cả các loại Chuỗi. Từ khóa COLLATE hiện được hỗ trợ bởi một số đầu cuối db bao gồm MySQL, SQLite và Postgresql. Bạn sẽ có thể viết một cái gì đó như thế này:
my_table = Table('table_name', meta, Column('my_column',
String(255, collate = 'NOCASE'), nullable=False))
- 1. Chọn chuỗi và phân biệt chữ hoa chữ thường
- 2. Tìm kiếm phân biệt chữ hoa chữ thường với $ trong
- 3. không phân biệt chữ hoa chữ thường trong NSArray chứaObject:
- 4. Đối sánh phân biệt chữ hoa chữ thường trong Marpa
- 5. Tìm kiếm danh sách phân biệt chữ hoa chữ thường
- 6. Tìm kiếm phân biệt chữ hoa chữ thường trong grails
- 7. khớp với phân biệt chữ hoa chữ thường trong xpath?
- 8. Mảng phân biệt chữ hoa chữ thường trong Lua
- 9. JavaScript: tìm kiếm phân biệt chữ hoa chữ thường
- 10. Thay thế không phân biệt chữ hoa chữ thường
- 11. Loại.Không phân biệt chữ hoa chữ thường - WinRT
- 12. Danh sách phân biệt chữ hoa chữ thường
- 13. GSON deserialize theo cách phân biệt chữ hoa chữ thường
- 14. GetElementsByTagName không phân biệt chữ hoa chữ thường?
- 15. Trường hợp Rspec không phân biệt chữ hoa chữ thường
- 16. Không phân biệt chữ hoa chữ thường không hoạt động
- 17. Không phân biệt chữ hoa chữ thường với Dynamic Linq
- 18. AngularJs, bộ lọc phân biệt chữ hoa chữ thường
- 19. DISTINCT MySQL phân biệt chữ hoa chữ thường
- 20. Tìm kiếm không phân biệt chữ hoa chữ thường SOLR
- 21. Kết hợp mẫu Lua phân biệt chữ hoa chữ thường
- 22. Java có phân biệt chữ hoa chữ thường không?
- 23. GetMethod không phân biệt chữ hoa chữ thường?
- 24. Đường dẫn XML - không phân biệt chữ hoa chữ thường
- 25. Tên tệp không phân biệt chữ hoa chữ thường?
- 26. URL không phân biệt chữ hoa chữ thường với mod_rewrite
- 27. Hàm in_array không phân biệt chữ hoa chữ thường
- 28. OData và phân biệt chữ hoa chữ thường
- 29. không phân biệt chữ hoa chữ thường số
- 30. Tên bảng có phân biệt chữ hoa chữ thường không?
Lưu ý: 'collation' không 'collate' –