Django模型的使用

系统Ubuntu20.04
1.安装Mysql
2.用pip3安装mysqlclient,这个连接Python和Mysql的工具
3.更改配置文件 setting.py其中 DATABASES文件如下。

...76 DATABASES = {77     'default': {78         'ENGINE': 'django.db.backends.mysql',79         'NAME': 'sqltest',80         'USER': 'root',81         'PASSWORD': '',82         'HOST': 'localhost',83         'PROT': '3306',84     }85 }

指明了我们要构造一个连接,连接python与root身份登陆的Mysql服务下sqltest数据库。因为没有密码,所以密码是空。

4.手动新建数据库,不然会报错。

mysql ->create database sqltest;

注意名称一致,并且使用分号。

5.使用下列命令,正式创建连接

# python manage.py migrate

即使没有任何模型,也会生成一些系统自带的表,检查如下:


mysql> use sqltest;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
mysql> show tables;
+----------------------------+
| Tables_in_sqltest          |
+----------------------------+
| auth_group                 |
| auth_group_permissions     |
| auth_permission            |
| auth_user                  |
| auth_user_groups           |
| auth_user_user_permissions |
| django_admin_log           |
| django_content_type        |
| django_migrations          |
| django_session             |
+----------------------------+
10 rows in set (0.00 sec)

6.在应用中modles文件创造模型,并且提交这写改变,生成对应的sql语句执行,并且会给你留下调用接口。
6.1创造模型,如下
polls/models.py

from django.db import modelsclass Question(models.Model):question_text = models.CharField(max_length=200)pub_date = models.DateTimeField("date published")class Choice(models.Model):question = models.ForeignKey(Question, on_delete=models.CASCADE)choice_text = models.CharField(max_length=200)votes = models.IntegerField(default=0)

6.2激活模型。
6.2.1将模型注册到应用
/sqltest/settings.py

INSTALLED_APPS = [#下面第一个是模型,根目录是project目录,注意PollsConfig是驼峰体"polls.apps.PollsConfig","django.contrib.admin","django.contrib.auth","django.contrib.contenttypes","django.contrib.sessions","django.contrib.messages","django.contrib.staticfiles",
]

6.3正式迁移所有polls,注意这时候polls文件已经被包含在project里面了,所以可以别 manage.py发现.

(env) root@Moon:~/workplace/python/virtualenv/env/sqltesttttttt# python3 manage.py makemigrations polls

会有如下输出:

Migrations for 'polls':polls/migrations/0001_initial.py- Create model Question- Create model Choice

6.3.1上面的格式是可以转化为正式的mysql语句的,注意0001_initial.py。使用下面语句,将此文件翻译回Mysql语句。

(env) root@Moon:~/workplace/python/virtualenv/env/sqltesttttttt# python manage.py sqlmigrate polls 0001
--
-- Create model Question
--
CREATE TABLE `polls_question` (`id` bigint AUTO_INCREMENT NOT NULL PRIMARY KEY, 		 		  	 `question_text` varchar(200) NOT NULL,`pub_data` datetime(6) NOT NULL);
--
-- Create model Choice
--
CREATE TABLE `polls_choice` (`id` bigint AUTO_INCREMENT NOT NULL PRIMARY KEY, 	`choice_text` varchar(200) NOT NULL, `votes` integer NOT NULL, `question_id` bigint NOT NULL);
ALTER TABLE `polls_choice` 
ADD CONSTRAINT`polls_choice_question_id_c5b4b260_fk_polls_question_id`
FOREIGN KEY (`question_id`) 
REFERENCES `polls_question` (`id`);

6.4应用生成的迁移文件,生成表和操作数据库的api。

(env) root@Moon:~/workplace/python/virtualenv/env/sqltesttttttt# python3 manage.py migrate

为了验证我们的想法,查询数据库sqltest,如下:


mysql> use sqltest;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
mysql> show tables;
+----------------------------+
| Tables_in_sqltest          |
+----------------------------+
| auth_group                 |
| auth_group_permissions     |
| auth_permission            |
| auth_user                  |
| auth_user_groups           |
| auth_user_user_permissions |
| django_admin_log           |
| django_content_type        |
| django_migrations          |
| django_session             |
| polls_choice               |
| polls_question             |
+----------------------------+
12 rows in set (0.00 sec)

可以看到,上图的最后两行,出现了我们要的表。

7可以看到基本上的想法和Git是相似的,创造缓冲区,用commit一次性写入所有改变,这里用的是migrate,总的来说包括如下步骤:

编辑 models.py 文件,改变模型。
运行 python manage.py makemigrations 为模型的改变生成迁移文件。
运行 python manage.py migrate 来应用数据库迁移。

为模型改变生成迁移文件(makemigrations),之后正式应用迁移文件,创造数据库和api。

8.有了表(定义好了字段,但还是没有填充),和api,我们就要用python操纵数据库 了。使用如下命令,进入到含有生成数据库api的python shell。

(env) root@Moon:~/workplace/python/virtualenv/env/sqltesttttttt# python3 manage.py shell

我们利用这个shell填充一些表的record,来说明我们确实可以用python操作数据库了。


>>> from polls.models import Choice, Question
>>> Question.objects.all()
<QuerySet []>
>>> from django.utils import timezone
>>> q=Question( question_text='开会时间', pub_data=timezone.now())
>>> q.save()

注意,创建表时候写错成了pub_data,因此沿用了。
注意,要用save()提交,才能正式生效。接下来,我们检查sqltest库里面的polls_question表,看是否增加了记录,如下:

mysql> use sqltest;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
mysql> show tables;
+----------------------------+
| Tables_in_sqltest          |
+----------------------------+
| auth_group                 |
| auth_group_permissions     |
| auth_permission            |
| auth_user                  |
| auth_user_groups           |
| auth_user_user_permissions |
| django_admin_log           |
| django_content_type        |
| django_migrations          |
| django_session             |
| polls_choice               |
| polls_question             |
+----------------------------+
12 rows in set (0.00 sec)mysql> select * from polls_question;
+----+---------------+----------------------------+
| id | question_text | pub_data                   |
+----+---------------+----------------------------+
|  1 | 开会时间      | 2024-06-01 16:36:54.949112 |
+----+---------------+----------------------------+
1 row in set (0.00 sec)

可以看到,确实插入进去了。
(这个其实还是挺麻烦的,不知道有没有更好用的工具,非常自然地把python和mysql结合起来)
ref:
https://docs.djangoproject.com/zh-hans/4.2/intro/tutorial02/
不同的将sqlite3换成了mysql。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/20629.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[数据集][目标检测]剪刀石头布检测数据集VOC+YOLO格式1973张3类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;1973 标注数量(xml文件个数)&#xff1a;1973 标注数量(txt文件个数)&#xff1a;1973 标注…

Docker 简介和安装

目录 Docker 是什么 跟普通虚拟机的对比 打包、分发、部署 Docker 部署的优势 Docker 通常用来做什么 重要概念&#xff1a;镜像、容器 安装 镜像加速源 Docker 是什么 Docker 是一个应用打包、分发、部署的工具 你也可以把它理解为一个轻量的虚拟机&#xff0c;它只虚…

SAP揭秘者- SAP PP模块日常常见运维问题之工单入库失败原因分析及快速处理

文章摘要&#xff1a; 无论您是负责SAP实施项目还是负责SAP运维项目&#xff0c;当用户发现有SAP PP模块的各种异常问题的时都需要作为SAP PP顾问的您快速地理解用户提交的问题&#xff0c;并快速地解决这些问题&#xff0c; 上篇文章跟大家聊了基本单位维护错了怎么修改的解决…

ARC学习(2)基本编程模型认识(二)

笔者继续来学习一下arc的编程模型的寄存器信息。 1、core寄存器深入 参数寄存器&#xff1a;r0-r7&#xff0c;8个参数&#xff0c;暂存器&#xff1a;r10-r15保存寄存器&#xff1a;r16-r25 调用函数需要保存的寄存器指针寄存器&#xff1a;gp&#xff08;全局指针&#xff09…

functional函数对象库学习

类模板 std::function 是一种通用多态函数包装器。std::function 的实例能存储、复制及调用任何可复制构造 (CopyConstructible) 的可调用 (Callable) 目标——函数&#xff08;通过其指针&#xff09;、lambda 表达式、bind 表达式或其他函数对象&#xff0c;以及成员函数指针…

FPGA基于DE2-115开发板驱动HC_SR04超声波测距模块|集成蜂鸣器,led和vga提示功能

文章目录 前言一、实验原理二、Verilog文件2.1 时钟分频2.2 超声波测距2.3 超声波驱动 三、实现过程3.1 模块说明3.2 引脚分配 三、演示视频总结参考 前言 环境 硬件 DE2-115 HC-SR04超声波传感器 软件 Quartus 18.1 目标结果 使用DE2-115开发板驱动HC-SR04模块&#xff0…

Windows 下 PostgreSQL 图形化界面安装、配置详解

相信大家对PostgreSQL都不陌生吧&#xff0c;自从MySQL被Oracle所控制后&#xff0c;PostgreSQL就成为了国内去O的首选数据库了&#xff0c;并且PostgreSQL目前不受任何商业公司控制&#xff0c;所以国内很多厂商都是基于PostgreSQL做二次开发来实现数据库自主可控的目标(国内很…

简单模拟实现shell(Linux)

目录​​​​​​​ 前言 展示效果 实现代码 前言 该代码模拟了shell的实现&#xff0c;也就是解析类似于“ls -a -l"的命令&#xff0c;当我们启动我们自己写的shell的可执行程序时&#xff0c;我们输入"ls"的命令&#xff0c;也可以展示出在shell中输入&…

学习笔记——网络参考模型——TCP/IP模型(物理层)

一、TCP/IP模型-物理层 1、数据传输(交换)的形式 (1)电路交换 特点&#xff1a;通信双方独占通信链路。 优点&#xff1a;数据传输时延小&#xff0c;适用于实时通信&#xff1b;数据按序发送&#xff0c;不存在失序问题&#xff1b;适合模拟信号和数字信号传输。 缺点&am…

【前缀和】42. 接雨水

本文涉及知识点 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 LeetCode42. 接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&am…

IDEA+MyBatisX根据mapper方法自动添加注解和生成xml方法结构

前提&#xff1a;确保IDEA已安装并启用了MyBatisX插件 在service层写dao或mapper的方法结构&#xff0c;反向生成dao层方法声明&#xff0c;如下&#xff1a; void updateStock(Long skuId, Long wareId, Integer skuNum); 由于该方法传递多个参数&#xff0c;为了让MyBatis识…

心链6----开发主页以及后端数据插入(多线程并发)定时任务

心链 — 伙伴匹配系统 开发主页 信息搜索页修改 主页开发&#xff08;直接list用户&#xff09; 在后端controller层编写接口去实现显示推荐页面的功能 /*** 推荐页面* param request* return*/GetMapping("/recommend")public BaseResponse<List<User>&…

Go-知识并发控制WaitGroup

Go-知识并发控制WaitGroup 1. 认识 WaitGroup2. 基本原理2.1 信号量2.2 数据结构2.3 Add2.4 Wait2.5 Done 3. 小例子3.1 主协程等待子协程执行完成3.2 子协程等待主协程信号3.3 GetFirst 4. 总结 gitio: https://a18792721831.github.io/ 1. 认识 WaitGroup WaitGroup 是Go 应…

机器学习笔记——双线性回归 MF、 FM

双线性模型 在推荐系统领域常常使用 含义是二元函数固定一个自变量时&#xff0c;函数关于另外一个自变量是线性的。 矩阵分解模型MF 如果我们需要对一个用户推荐电影我们应该怎么推荐&#xff1f; 结合用户以及用户对电影的评分&#xff0c;可以猜测用户的偏好&#xff0c;…

Ubuntu 20.04的安装过程

在Ubuntu 20.04的安装过程中&#xff0c;需要遵循一系列步骤确保系统正确无误地配置和启动。下面将详细介绍Ubuntu 20.04的安装过程&#xff1a; 准备工作 下载Ubuntu镜像&#xff1a;需要访问Ubuntu官网下载所需的Ubuntu 20.04桌面版ISO镜像[1]。制作启动盘&#xff1a;下载完…

公网IP地址如何查询?

公网IP地址是指在互联网中可以被全球范围内的设备访问的IP地址。在网络通信中&#xff0c;公网IP地址扮演着重要的角色&#xff0c;它可以标识设备在互联网中的位置。查询公网IP地址是一种常见的网络管理需求&#xff0c;因为它能够提供网络设备的准确位置信息&#xff0c;方便…

AI 绘画爆火背后:扩散模型原理及实现

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学。 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 合集&#x…

Java进阶学习笔记34——Arrays类

Arrays&#xff1a; 用来操作数组的工具类。 解释说明&#xff1a; 只要知道代码这么写就可以了。 package cn.ensource.d5_arrays;import java.util.Arrays; import java.util.function.IntToDoubleFunction;public class ArraysTest1 {public static void main(String[] arg…

Spark任务调度

Spark任务调度是Spark作业执行的核心组成部分&#xff0c;它负责将作业拆分成多个任务&#xff0c;并将这些任务分配到集群中的工作节点上执行。以下是关于Spark任务调度的详细解释&#xff0c;结合参考文章中的信息&#xff1a; 1. 调度基本概念 作业&#xff08;JOB&#x…

LTspice仿真中设置电阻随时间变化的方法

背景&#xff1a; 笔者找了很多资料都没有看到如何设置电阻、电容等参数随时间变化。但在实际模拟中&#xff0c;总会遇到需要模拟这些量的变化。故撰写此文&#xff0c;供大家参考。 除了模拟随时间变化外&#xff0c;同样的思路也可以模拟随其他变量变化 效果展示 设置电…