【发布时间】:2020-02-13 21:29:48
【问题描述】:
我在我的数据库表上设置 utf8 时遇到了一些问题。
我遵循了这些文档但没有工作
pymsql 的文档: https://pymysql.readthedocs.io/en/latest/modules/connections.html
peewee 的文档: http://docs.peewee-orm.com/en/latest/peewee/database.html#using-mysql
这是我的代码
import datetime
from peewee import *
import pymysql
from getDataFromExcel import *
mysql_db = MySQLDatabase(
databasename,
user='username',
password='password',
host='host',
charset='utf8', # <-- what I followed from docs
)
class BaseModel(Model):
"""A base model that will use our MySQL database """
class Meta:
database = mysql_db
class Food(BaseModel):
name = CharField()
allergy = CharField()
special = CharField()
createdAt = DateTimeField(default = datetime.datetime.now)
updatedAt =DateTimeField(default = datetime.datetime.now)
class Meta:
table_name='Food'
def initialize():
"""Create the database and the table if they don't exist."""
mysql_db.connect()
print('Initialized')
def insert_food_data(food_rows):
with mysql_db.atomic():
Food.insert_many(food_rows,fields=[
Food.name,
Food.allergy,
Food.special
]).execute()
if __name__ =='__main__':
initialize()
我运行这个使用
python3 -i filename.py
之后,我以交互方式添加了一些代码(删除现有表并创建新表以检查 utf8 设置是否完成)
mysql_db.execute_sql("SET FOREIGN_KEY_CHECKS=0")
mysql_db.drop_tables([Food])
mysql_db.create_tables([Food])
但是当我使用 MySQLWorkbench 检查我的数据库时。 我桌子的 DDL 水龙头说
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`allergy` varchar(255) NOT NULL,
`special` varchar(255) NOT NULL,
`createdAt` datetime NOT NULL,
`updatedAt` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
这意味着 charset 已设置为 'latin1' 我可以通过在其中插入一些数据来知道这一点。
这是为什么呢?
我设置 charset ase uf8 有什么问题吗?
如果有人可以帮助我,将不胜感激。
感谢您阅读本文。
【问题讨论】:
标签: mysql database utf-8 pymysql peewee