Django项目开发—用pymysql连接数据库

一、使用pymysql库连接数据库

1.在终端的项目路径下下载pymysql包:pip install pymysql

2.尝试pycharm连接数据库:

        在项目目录下创建mysqltest目录(与应用同级,命名不要与包名相同,相同会优先调用自定义的而不是系统的),并创建mysqlTest.py文件。调用pymysql的connect方法,输入自己mysql的相关参数,连接成功后可以使用execute方法去执行相关sql语句,再次查看自己的mysql,若成功刷新后会显示数据

import  pymysql


con=pymysql.connect(
    user='root',
    password='你的mysql密码',
    host='localhost',   #也可以是127.0.0.1,  开发项目时是远程链接的ip
    port=3306,
    database='想要连接的数据库'
)
print(con)

cursor=con.cursor()
#创建sql语句
# sql='create database db_pm '
# sql=('create table tb_un(id int not null primary key ,username varchar(5) , password int )')
sql=('select id from tb_un where username="张三"')
cursor.execute(sql)
print(cursor.execute(sql))


#关闭连接,释放资源
cursor.close()
con.close()

二、Django配置数据库连接

1.Django使用的是默认的sqllite3数据库,更改默认配置(前提是安装有pymysql库),修改项目下的settings.py ,将原有引擎和数据库名注掉,添加自己的引擎和相关参数

DATABASES = {
				'default': {
					# 'ENGINE': 'django.db.backends.sqlite3',
					# 'NAME': BASE_DIR / 'db.sqlite3',
					'ENGINE': 'django.db.backends.mysql',
					'NAME': '你的数据库名',
					'USER': 'root',
					'PASSWORD': '数据库密码',
					'HOST': '127.0.0.1',  
					'PORT': 3306,
				}
			}

2.由于python3.8版本前用的是mysql第三方库连接数据库,在此之后使用的是pymysql,因此会出现连接失败的现象。要在项目文件(与setting.py同级)__init__.py中添加pymysql替代mysqldb模块的代码

import pymysql

pymysql.install_as_MySQLdb()    

3.要清楚的一点是Django是使用MVT框架,利用ORM(Object Relational Mapping)对象关系映射模型实现与数据库的互动。直白一点将就是应用的一个类就对应数据库中的一张表,类中的一个属性就对应表中一个字段。这就是说我们可以操作类和属性通过Django的操作mysql数据库。

4.创建模型类

        在应用目录下的models.py(项目目录除了配置一些参数,其余其他操作都在其他目录)文件中创建用户模型(注意不需要设置id,系统会自己配置自增主键id)

class User(models.Model):
		
		username = models.CharField(max_length=20, null=False, verbose_name="用户名")
		password = models.CharField(max_length=20, null=False, verbose_name="密码")
		gender = models.IntegerField(null=True, default=0, verbose_name="性别")
		age = models.IntegerField(null=True, verbose_name="年龄")
		phone = models.CharField(max_length=20, null=True, verbose_name="电话")
		email = models.EmailField(max_length=32, null=True, verbose_name="邮件")

		class Meta:           # 子类,用于配置模型的 元数据 (metadata),即"关于模型的数据"
			db_table = "tb_user"    

        然后生成迁移文件(用于生成数据库表的文件),命令(在应用目录下的终端)

 python .\manage.py makemigrations

 可能会报下面的错误:只需要pip install  cryptography   ,下载这个库就可以了(不报错不用理会)

RuntimeError: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods

       然后执行迁移文件(用于生成数据库表)

 python manage.py migrate

出现以下界面就说明成功了(也可以刷新数据库,去查看有没有增加很多表,除tb_user外还有一些支持表) 

 接下来就可以操作对象(间接操作数据库了)

        (1)终端输入命令>   python manage.py shell
        (2)导入模型类(还是在终端)>from book.models import User(类名)

        (3)添加数据(刚刚创建的是空表):刷新对应表会有数据更新

user = User()
		user.username = "admin"
		user.password = "123456"
		user.gender = 1
		user.age = 20
		user.phone = "15899998888"
		user.email = "admin@qiku.com"
		user.save()

        (4)查询数据

                        查一条:user = User.objects.get(pk=1)

                        查所有:User.objects.all()
                        过滤查询:users = User.objects.filter(username='admin')

                        模糊查询:users = User.objects.filter(username__contains='ad')

                        .......

5.多表关联查询

        在models.py创建多个类,A类作为主表,B为副表,B中有字段与A相关联(A的外键)

        A类正常创建不需要额外添加字段,B中多一个外键属性

bookinfo=models.ForeignKey("BookInfo",on_delete=models.CASCADE)
外键名            外键     要关联的类名(A类名)     设置约束关系(这里是级联)

        怎样体现多表关联呢?

                若A类(A表)实例化一个对象a  ,B类中有一个属性是所属部门(A类中有部门),B也有一个对象b,在实例化b的所属部门时可以:b.A类名小写=A.objects.get(department="b属于的部门名")       ,    b.save()  查看数据库就会发现b匹配上了a中字段。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值