django框架学习(数据库)
Django为多种数据库后台提供了统一的调用API。根据需求不同,Django可以选择不同的数据库后台。MySQL算是最常用的数据库。我们这里将Django和MySQL连接;
一、mysql驱动
使用的sql连接包不同,Python2.x 版本要安装mysql-python,而Python3.x版本要安装 mysqlclient ;
py文件输入:import MySQLdb
若未报错则安装成功!
或者使用pymysql,如下操作:
在APP中的__init__.py文件中添加代码:
import pymysql pymysql.install_as_MySQLdb()
如果在下面第四步时报错:mysqlclient 1.3.13 or newer is required; you have 0.9.3.
1、可修改部分文件代码可解决,参考来源:https://blog.csdn.net/weixin_33127753/article/details/89100552/
2、也可以在__init__.py文件修改如下,提示需要什么版本,下面就改成什么版本
import pymysql pymysql.version_info=(1,4,0,"final",0) pymysql.install_as_MySQLdb()
二、mysql用户创建和赋权
1、启动mysql: mysql -u root -p
2、建库: CREATE DATABASE villa DEFAULT CHARSET=utf8;
3、创建账户: create user '用户名'@'访问主机' identified by '密码';
create user '用户名'@'localhost' identified by 'password';
4、赋予权限: grant 权限列表 on 数据库.* to '用户名'@'访问主机' ;(修改权限时在后面加with grant option)
grant SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES
on villa.* TO 'yinwenbin'@'localhost';
所有权限 grant all privileges on villa.* TO '用户名'@'localhost';
5、刷新系统权限表,否则会出现拒绝访问
flush privileges;
三、settings设置
DATABASES = { # 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), # } 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'villa', 'USER': '用户名', 'PASSWORD': '密码', 'HOST':'localhost', 'PORT':'3306', } }
MySQL是关系型数据库。但在Django的帮助下,我们不用直接编写SQL语句。
Django将关系型的表(table)转换成为一个类(class)。而每个记录(record)是该类下的一个对象(object)。
四、models.py设置
class project(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=200) desc = models.CharField(max_length=200) leader = models.CharField(max_length=200) tester = models.CharField(max_length=200) programmer = models.CharField(max_length=200) publish_app = models.CharField(max_length=200) create_time = models.DateTimeField(auto_now_add=True) update_time = models.DateTimeField(auto_now=True) def to_dict(self): return {'id': self.id, 'name': self.name, 'desc': self.desc, 'leader': self.leader, 'tester': self.tester, 'programmer': self.programmer, 'publish_app': self.publish_app, 'create_time': self.create_time.strftime('%Y-%m-%d %H:%M:%S'), 'update_time': self.update_time.strftime('%Y-%m-%d %H:%M:%S')}
1、类Character定义了数据模型,它需要继承自models.Model。
2、通过ORM的方式对数据库进行操作
3、类Character有一个__unicode__()方法,用来说明对象的字符表达方式。如果是Python 3,定义__str__()方法,实现相同的功能。
五、数据迁移(是指model的信息,不是指具体的数据)
官网解释比较清楚:https://docs.djangoproject.com/en/4.0/intro/tutorial02/
迁移非常强大,可让您在开发项目时随时间更改模型,而无需删除数据库或表并创建新表 - 它专门用于实时升级数据库,而不会丢失数据。我们将在本教程的后面部分更深入地介绍它们,但现在,请记住进行模型更改的三步指南:
1、更改您的模型(models.py)
2、运行为这些更改创建迁移 python manage.py makemigrations
3、运行以将这些更改应用到数据库 python manage.py migrate
linux环境执行的时候报错:raise RuntimeError("cryptography is required for sha256_password or caching_sha2_password")
解决办法
pip install cryptography

浙公网安备 33010602011771号