Django从MySQL数据库读取json类型数据的坑

Python从MySQL数据库读取json类型数据的坑

场景:最近在写Django,写到购物车的时候,每次退出时,使用json格式,将购物车中的信息存储到mysql表中,然后在用户每次登陆时,读取相应的数据,显示在前端网页。

1、json格式的数据,以什么样的字段类型存储:

  一开始,我是用的是varchar类型进行存储,但是发现,再登陆时,都取出来的数据变成了字符串类型,之前写好的代码,无法对其进行解析;

  之后,选择了json类型进行存储,结果读取出来也是不能用;

  经过Google,找到了这篇博文,经过阅读,选择了Blob类型进行存储;

2、存储后,再进行登陆,会报错:Expecting property name enclosed in double quotes: line 1 column 2 (char 1):

  还是进行Google,在stackoverflow中,有相关解答;(这篇问答中高票回答,我的情况没有使用他的json.loads(ast.literal_eval()) 这样处理)

  出现这种错误,是因为json格式数据,必须使用双引号,且最后一条数据后面没有逗号;

  去看了下我的mysql中的数据,在django将json数据写入的时候,全部变为了单引号;

  因此,需要将读取出来的数据进行在处理,修改为json标准格式,此时:就需要导入ast库,使用ast.literal_eval()函数进行处理,当然可以使用正则替换方式,将其中的单引号换为双引号;

3、经过以上处理,运行后又出现了问题:malformed node or string: b'{"20": {"id": 20, "goodsname": "\\u795e\\u821f。。。。。

  究其原因:是因为Bolo字段类型,存储的数据为二进制Bytes类型的数据;

  将该数据读取出来,需要将其进行默认转义:data.decode();

  然后再进行ast.literal_eval()的处理;

 

转载于:https://www.cnblogs.com/lambs/p/9316457.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Django中从MySQL读取数据需要进行以下步骤: 1. 安装MySQL驱动程序:在Django项目中,需要安装MySQL驱动程序以便与MySQL数据库进行交互。可以使用pip install命令安装MySQL驱动程序,如下所示: ``` pip install mysqlclient ``` 2. 配置数据库连接:在Django项目的settings.py文件中,需要配置MySQL数据库的连接参数。例如: ``` DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'mydatabase', 'USER': 'mydatabaseuser', 'PASSWORD': 'mypassword', 'HOST': '127.0.0.1', 'PORT': '3306', } } ``` 3. 创建模型类:在Django项目中,需要创建模型类以便与MySQL数据库中的表进行交互。例如: ``` from django.db import models class Book(models.Model): title = models.CharField(max_length=100) author = models.CharField(max_length=50) publish_date = models.DateField() ``` 4. 执行查询操作:在Django项目中,可以使用ORM(对象关系映射)进行查询操作。例如: ``` from myapp.models import Book # 查询所有图书 books = Book.objects.all() # 查询指定条件的图书 books = Book.objects.filter(author='John') # 查询单个图书 book = Book.objects.get(id=1) ``` 以上就是从MySQL读取数据的基本步骤,具体实现可以根据项目需求进行调整。 ### 回答2: Django是一个基于Python的开源Web开发框架,它提供了方便的模型层、视图层和模板层,以帮助开发人员构建高效且易于维护的Web应用程序。在Django中,可以使用内置的ORM(对象关系映射)来管理与数据库的交互。 要从MySQL数据库读取数据,首先需要在Django项目的设置中配置数据库连接。在settings.py文件中,可以设置数据库类型(默认为SQLite),也可以指定MySQL数据库的主机、端口、用户名、密码以及要使用的数据库名称。 配置完成后,需要在Django应用程序的模型文件中定义与数据库表对应的模型类。模型类继承自Django的models.Model类,并定义各个字段以及字段类型。例如,可以在模型类中定义一个名为Article的类,用于表示文章表,包含标题、内容和发布日期等字段。 在定义好模型类后,可以使用Django的迁移工具来创建数据库表。运行migrations命令,Django会根据模型类的定义创建相应的数据库表。可以使用makemigrations命令生成迁移文件,然后运行migrate命令来执行迁移操作。 一旦数据库表创建完成,就可以通过模型类来查询数据库中的数据了。可以使用Django提供的ORM方法,例如all()、filter()、get()等来从数据库中获取数据。 例如,可以使用Article.objects.all()方法来获取所有文章的数据,返回的是一个QuerySet对象,可以遍历获取每一篇文章的具体数据。 此外,还可以通过模型类的字段名称来进行筛选,例如Article.objects.filter(title="Python入门"),可筛选出标题为“Python入门”的文章数据。 获取到数据后,可以在视图函数中将数据传递给模板,从而在前端页面中展示出来。 总结起来,Django通过配置数据库连接、定义模型类、运行迁移操作以及使用ORM方法,可以方便地从MySQL数据库读取数据,实现数据的查询与展示。 ### 回答3: 在Django中,要从MySQL数据库读取数据,首先需要确保已经在项目的配置文件中正确配置了数据库连接信息。 1. 配置数据库连接 在项目的settings.py文件中,找到DATABASES设置项,将它配置为MySQL数据库的连接信息。例如: ``` DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'your_database_name', 'USER': 'your_username', 'PASSWORD': 'your_password', 'HOST': 'your_database_host', 'PORT': 'your_database_port', } } ``` 请确保将`your_database_name`、`your_username`、`your_password`、`your_database_host`和`your_database_port`替换为实际的MySQL数据库信息。 2. 创建数据模型 在Django中,数据模型是通过定义继承自`django.db.models.Model`的类来实现的。请在您的应用程序(例如,`your_app`)中的models.py文件中定义您的数据模型。以下是一个示例: ```python from django.db import models class Book(models.Model): title = models.CharField(max_length=200) author = models.CharField(max_length=100) publication_date = models.DateField() def __str__(self): return self.title ``` 以上定义了一个名为Book的数据模型,包含title(书名)、author(作者)和publication_date(出版日期)三个字段。 3. 读取数据 要从MySQL数据库读取数据,可以使用Django的查询API。以下是一些常用的示例: ```python # 导入您的数据模型 from your_app.models import Book # 获取所有的书籍 books = Book.objects.all() # 获取特定条件的书籍 recent_books = Book.objects.filter(publication_date__year__gte=2021) # 获取第一本书 first_book = Book.objects.first() # 获取书籍数量 book_count = Book.objects.count() ``` 您可以根据自己的需求使用各种查询方法来读取MySQL数据库中的数据。 以上是通过DjangoMySQL数据库读取数据的基本步骤和示例代码。希望对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值