article cover

mysql的数据表操作 mysql

创建表

show tables; -- 显示表
create table t1(id int, name char(10)); -- 创建表
create table t1(id int, name char(10)) default charset=utf8; -- 创建指定字符编码的表

创建详细的表

create table t1(
    列名 类型 null, -- 允许空
    列名 类型 not null, -- 不许空
    列名 类型 not null default 1, -- 默认值
    列名 类型 auto_increment primary key, -- 自增,主键(约束:不能重复且不能为空;加速查找)
    id int,
    name char(10) -- 末行不加","
) engine=innodb default charset=utf8; -- 指定 innodb引擎

引擎的区别:

引擎 功能
innodb 支持事务,原子性操作
myisam 不支持事务

参考

mysql使用索引与外键

mysql的数据类型

清空表

delete from t1; -- 自增id不归零
truncate table t1; -- 自增id归零

删除表

drop table t1;

查看表的描述description

desc t1;

查看表的SQL创建语句

show create table t1;

修改自增变量值

alter table t1 set AUTO_INCREMENT=2;

benojan 发布于  2022-11-2 23:07 
article cover

mysql的数据库操作 mysql

show databases; -- 显示数据库
create database db1; -- 创建数据库
create database db1 default charset utf8mb4; -- 创建数据库之指定字符编码
drop database db1; -- 删除数据库
use db1; -- 进入数据库
标签: mysql

benojan 发布于  2022-11-2 23:03 
article cover

mysql的用户操作 mysql

  1. 创建用户

    create user '用户名'@'IP地址' identified by '密码';
    
    create user 'zhangsan'@'192.168.1.1' identified by '123123';
    create user 'zhangsan'@'192.168.1.%' identified by '123123';
    create user 'zhangsan'@'%' identified by '123123';
  2. 用户授权(权限、人)

    show grants for '用户'; -- 查询权限
    grant 权限类型 on 数据库.表 to '用户'@'IP地址'; -- 授权
    revoke 权限类型 on 数据库.表 from '用户'@'IP地址'; -- 取消权限
    
    grant select,insert,update on db1.t1 to 'zhangsan'@'%';
    grant all privileges on db1.* to 'zhangsan'@'%';

    常见的权限类型:

    权限类型 中文解释
    all privileges 所有权限
    select 读取
    delete 删除
    update 更新
    create 创建
    drop 删除数据库、数据表
  3. 修改用户名

    rename user '用户名'@'IP地址' to '新用户名'@'IP地址';
  4. 修改密码

    alter user '用户名'@'IP地址' identified by '新密码';
  5. 删除用户

    drop user '用户名'@'IP地址';
  6. 查看用户

    use mysql;
    select user, host from user;
标签: mysql

benojan 发布于  2022-11-2 23:00 
article cover

mysql的环境搭建 mysql

  1. 下载 mysql.zip

  2. 解压缩 mysql.zip 至 c:\mysql(注意目录不要有中文)

  3. 添加环境变量:配置Path,添加mysql下的bin目录

  4. 初始化

>mysqld --install # 安装服务
>mysqld --initialize-insecure # 初始化mysql
>net start MySQL # 开启mysql服务
  1. 登录并更改密码
>mysql -u root -p
# 输入生成的密码

mysql>alter user 'root'@'localhost' identified by '123' # 更改新密码为:123

mysql>exit

>mysql -u root -p
# 输入新密码
  1. 关闭mysql服务
>net stop MySQL
标签: mysql

benojan 发布于  2022-11-2 22:57 
article cover

django之基于类的视图和基于函数的视图 django

Django中的路由可以对应一个函数,也可以对应一个类。


benojan 发布于  2022-11-2 15:53 
article cover

django的数据库配置与操作 django

数据库配置

  1. 创建数据库

  2. 配置 settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'XXX',
        'USER': 'XXX',
        'PASSWORD': 'xxx',
        'HOST': 'localhost',
        'PORT': 3306,
    }
}
  1. 修改 __init__.py,更改 mysqldbpymysql
import pymysql
pymysql.install_as_MySQLdb()

操作表

创建表、修改表、删除表

>python manage.py makemigrations
>python manage.py migrate

操作行

增加

models.UserGroup.objects.create(title='销售部')
models.UserInfo.objects.create(username='root', password='123', usergroup_id=1)

删除

usergroups = models.UserGroup.objects.filter(id=1).delete()

改变

usergroups = models.UserGroup.objects.filter(id=1).update(title='公关部')

from django.db.models import F
models.UserInfo.objects.all().update(age=F('age')+1)
# update userinfo set age = age + 1;

查找

一般查找
userlist = models.UserGroup.objects.all()#.first()
for row in userlist:
    print(row.id, row.title)

userlist = models.UserGroup.objects.filter(id=1, title='aaa') # and
userlist = models.UserGroup.objects.exclude(id=1) # !=
userlist = models.UserGroup.objects.filter(id__gt=1) # >
userlist = models.UserGroup.objects.filter(id__lt=1) # <
进阶查找
# 连表查找
# usertype是userinfo的fk字段
obj = models.UserInfo.objects.all().first()
print(obj.name, obj.age, obj.usertype_id, obj.usertype.title) # (正向)连表查找

obj = models.UserType.objects.all().first()
print(obj.id, obj.title, obj.userinfo_set.all()) # (反向)
print(obj.id, obj.title, obj.userinfo_set.filter(name='xx')) # 过滤

# 获取的类型
models.UserInfo.objects.all() # 返回UserInfo类型的QuerySet数组
models.UserInfo.objects.all().values('id', 'name') # 返回字典类型的QuerySet数组
models.UserInfo.objects.all().values_list('id', 'name') # 返回元组类型的QuerySet数组

# 排序 Order By
models.UserInfo.objects.all().order_by('id') # 升序
models.UserInfo.objects.all().order_by('-id') # 降序
models.UserInfo.objects.all().order_by('id', 'name') # 多列排序

# 分组 Group By ... Having ...
from django.db.models import Count, Sum, Max, Min, Avg
v = models.UserInfo.objects.filter(id__gt=2).values('usertype_id').annotate(xxxx=Count('id')).filter(xxxx__gt=2) # 注意前后filter表示的含义不同
print(v.query) # 查看生成的SQL语句
# select usertype_id, count(id) as xxxx from userinfo where id > 2 group by usertype_id having count(id) > 2;

# in; between ... and ...; gt lt gte lte ...;
models.UserInfo.objects.filter(id__in=[1,2,3]) # in
models.UserInfo.objects.filter(id__range=[1,3]) # between...and...
models.UserInfo.objects.filter(id__gt=1) # >
models.UserInfo.objects.filter(id__lt=1) # <
models.UserInfo.objects.filter(id__gte=1) # >=
models.UserInfo.objects.filter(id__lte=1) # <=
# not ...
models.UserInfo.objects.exclude(id__in=[1,2,3]) # in
models.UserInfo.objects.exclude(id__range=[1,3]) # between...and...
models.UserInfo.objects.exclude(id__gt=1) # >
models.UserInfo.objects.exclude(id__lt=1) # <
models.UserInfo.objects.exclude(id__gte=1) # >=
models.UserInfo.objects.exclude(id__lte=1) # <=

# like %
models.UserInfo.objects.filter(name__startswith='a') # like '%a'
models.UserInfo.objects.filter(name__endswith='a') # like 'a%'
models.UserInfo.objects.filter(name__contains='a') # like '%a%'
# not like %
models.UserInfo.objects.exclude(name__startswith='a') # not like '%a'
models.UserInfo.objects.exclude(name__endswith='a') # not like 'a%'
models.UserInfo.objects.exclude(name__contains='a') # not like '%a%'

# and
condition = {'id': 1, 'name': 'root'}
models.UserInfo.objects.filter(**condition) # 不推荐

# and or混合,对象方式 (不推荐)
from django.db.models import Q
models.UserInfo.objects.filter(Q(id=1) | Q(id=2)) # or
models.UserInfo.objects.filter(Q(id=1) & Q(id=2)) # and

# and or混合,方法方式 (推荐)
q1 = Q()
q1.connector = 'OR'
q1.children.append(('id', 1))
q1.children.append(('id', 10))
q1.children.append(('id', 9))

q2 = Q()
q2.connector = 'OR'
q2.children.append(('c1', 1))
q2.children.append(('c1', 10))
q2.children.append(('c1', 9))

con = Q()
con.add(q1, 'AND')
con.add(q2, 'AND')
models.UserInfo.objects.filter(con)

# select id, name, (select ...) as n from xb;
models.UserInfo.objects.all().extra(
    select={
        'n': 'select ... where id > %s and id < %s',
        'm': 'select ... where id = %s and id = %s',
    },
    select_params=[1, 3, 4, 5])

# where (select ... )
models.UserInfo.objects.all().extra(
    where=["id=%s or id=2", "name=%s"], # and
    params=[1, 'alex'])

# select * from app01_userinfo, app01_usertype;
models.UserInfo.objects.all().extra(
    tables=['app01_usertype'],
    where=['app01_usertype.id = app01_userinfo.user']
)
分页
obj = models.UserInfo.objects.all()[0:10]

benojan 发布于  2022-11-2 14:06