【发布时间】:2021-06-30 22:22:42
【问题描述】:
嗯,我有一个存储乐队名称的 django 模型。
因此,当一个名为“✝✝✝ (Crosses)”的带试图存储在 TextField 中时,新的麻烦就出现了。
这是错误:
django.db.utils.OperationalError: (1366, "Incorrect string value: '\\xE2\\x9C\\x9D\\xE2\\x9C\\x9D...' for column 'album_name' at row 1")
但这变得很奇怪,因为我有另一个存储带乐队信息的 JsonField 表。正确存储了相同的名称“✝✝✝(十字架)”。 JsonField 是一个存储 json.dumps(dict_with_band_info) 的 TextField ...所以在数据库中存储了类似的东西 {“名称”:“✝✝✝(十字架)”...}。重复一遍,这是之前的 TextField,可以按预期工作。
那么为什么尝试在 db 文本字段中添加 "name": "✝✝✝ (Crosses)" 会显示该错误,但在其他表中却没有?我正在使用 pdb.set_trace() 来查看 save() 之前的值是什么。
我想再次提一下,即使 JsonField 是我的乐队信息表中的 TextField,也不会出现该错误,但该错误出现在 band_name 的 TextField 中并且恰好出现在 instance.save() 中。有了这个,我可以推断出我的 text_fields 已准备好接收 unicode,因为在波段信息表中,jsonfield 显示“✝✝✝ (Crosses)”。为什么python在波段名称文本字段中保存的步骤中是utf-8?
我认为唯一不同的是:
当我保存乐队信息时,我将模型称为:
from bands.model import BandInfo
from apis import music_api as api
# Expected to be dict
band_info = api.get_band_info(song="This is a trick", singer="chino moreno")[0]
band = BandInfo()
band.band_info=band_info #{'name':'✝✝✝ (Crosses)'}
band.save()
当我保存乐队名称时:
def save_info(Table, data:dict):
instance_ = Table(
'name': data['name'] #'✝✝✝ (Crosses)'
)
instance_.save()
然后在另一个文件中:
from apis import music_api as api
from bands import snippets
from bands.models import Tracks
track_info = api.get_track_info(song="This is a trick", singer="chino moreno")[0]
snippets.save_info(Tracks, data:dict)
使用:python 3.9.1 django 3.1.7 带有社区安装的 MySQL Workbench 8
好吧,希望我犯了一个明显的错误。
【问题讨论】:
标签: python mysql django django-models python-3.9