Python 如何在Django中设置字符\u set\u结果latin1 mysql?
当数据库使用拉丁编码时,我不知道如何连接到mysql数据库。 我正在尝试并遵循文档,我正在使用Python 如何在Django中设置字符\u set\u结果latin1 mysql?,python,mysql,django,character-encoding,latin1,Python,Mysql,Django,Character Encoding,Latin1,当数据库使用拉丁编码时,我不知道如何连接到mysql数据库。 我正在尝试并遵循文档,我正在使用mysqlclient==1.3.5这里是我的数据库连接设置 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'test_api', 'USER': 'admin', 'PASSWORD': '123456', 'HOS
mysqlclient==1.3.5
这里是我的数据库连接设置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'test_api',
'USER': 'admin',
'PASSWORD': '123456',
'HOST': '192.168.59.103',
'PORT': '3306',
'OPTIONS': {
'charset': 'latin1', 'use_unicode': False
},
}
}
37 Phẩm Bồ tát hạnh
Am mây ngủ
An cứ kiết hạ
An lạc từ tâm
An lạc từng bước chân
Ãnh Sáng Từ Bi
但它并没有成功,所以接下来我尝试使用pymysql编写一个简单的脚本,效果很好
# -*- coding: utf-8 -*-
import pymysql
connection = pymysql.connect(host='192.168.59.103', port=3306, user='admin', passwd='123456', db='test_api', use_unicode=False)
customers = connection.cursor(pymysql.cursors.DictCursor)
customers.execute('SET character_set_results=\'latin1\'')
customers.execute('SELECT * FROM bz_media_album ORDER BY name_vn')
for customer in customers:
print customer['name_vn']
37 Phẩm Bồ tát hạnh
Am mây ngủ
An cứ kiết hạ
An lạc từ tâm
An lạc từng bước chân
Ánh Sáng Từ Bi
我也发现
但我不知道如何实现它
因为我所有的表都使用拉丁文1,我的问题是如何为django游标指定结果,因为我使用django和tastypie来开发移动api。我也有模型和资源。第一行应该是
Phẩ文学硕士ồ tát hạnh
?如果是这样的话,情况可能就是这样:
- 客户端中有utf8编码的字节
- 您执行了
(或python/django中的等效项)SET NAMES latin1
- 表中的列已声明为
字符集latin1
ALTER TABLE Tbl修改列col VARBINARY(…)代码>
ALTER TABLE Tbl修改列col VARCHAR(…)。。。字符集utf8代码>
我使用以下信号解决了类似的问题:
# apps.my_app.signals.py
from django.db.backends.signals import connection_created
from django.dispatch import receiver
@receiver(connection_created)
def set_character_set_results(*args, connection, **kwargs):
with connection.cursor() as cursor:
cursor.execute('SET CHARACTER_SET_RESULTS = \'latin1\'')
这就需要接线了
这应该适用于Mysql 4.1或更高版本
我们的用例是从一个mysql数据库中读取的,我们也不想改变它的编码,因为它是从一个遗留系统中读取和写入的。我们还有另一个(postgres)数据库,因此实际代码更像:
from django.db.backends.signals import connection_created
from django.dispatch import receiver
@receiver(connection_created)
def set_character_set_results(*args, connection, **kwargs):
if connection.alias == 'legacy':
with connection.cursor() as cursor:
cursor.execute('SET CHARACTER_SET_RESULTS = \'latin1\'')
但是我不想涉及当前的数据库,因为它已经有很多服务使用这个数据库了。请注意,
MySQLdb.python
模块有一个新的功能,除了正确读取一些非ascii字符之外,它还可以解决一些问题。
from django.db.backends.signals import connection_created
from django.dispatch import receiver
@receiver(connection_created)
def set_character_set_results(*args, connection, **kwargs):
if connection.alias == 'legacy':
with connection.cursor() as cursor:
cursor.execute('SET CHARACTER_SET_RESULTS = \'latin1\'')