首页 > 代码库 > day11

day11

数据库(在date目录下创建一个文件夹)
创建数据库
creat datebase db
进入数据库
use db

数据表
创建表
create table tb(
id int not null auto_increment primary key,
name char(20),
age int default 18,
gender char(1)
)engine=innodb default charset=utf8;
1.列名
2.数据类型 char类型是字符个数
3.是否可以为空 null/not null
4.默认值 default
5.自增(一个表只能有一个自增列) auto_increment
6.主键:
约束:不能为空,不能重复,primary key
索引:加速查找,只要表中有主键,就会再创建一个文件,以其他格式顺序存储
7.engine=innodb引擎,支持事物,回滚
8.字符编码
一对多: 多表
create table user(
id int not null auto_increment primary key,
name char(20),
age int default 18,
gender char(1),
department_id int,
constraint xxxxxxx foreign key (department_id) references department(id)

)engine=innodb default charset=utf8;


create table department(
id int not null auto_increment primary key,
title char(32)
)engine=innodb default charset=utf8;
1.外键约束,某一列数据是另外一张表中列里面已经存在的值

插入
insert into tb(name,age,gender)values(‘alex‘,19,‘男‘)
删除
drop tb
多对多:
create table boy(
id int not null auto_increment primary key,
name char(32)
)engine=innodb default charset=utf8;

create table girl(
id int not null auto_increment primary key,
name char(32)
)engine=innodb default charset=utf8;

create table relationship(
id int not null auto_increment primary key,
girl_id int,
boy_id int,
constraint b_id foreign key(boy_id) references boy(id)
constraint g_id foreign key(girl_id) references girl(id)
)engine=innodb default charset=utf8;

1.relationship关系表
2.应用场景:

数据行


pymysql
1.cursor
import pymysql
conn = pymysql.connect(host=‘127.0.0.1‘,port=3306,user=‘root‘,password=‘root‘,database=‘new‘,charset=‘utf8‘)#建立连接,能去=取到内容
cursor = conn.cursor()#去数据库返回的结果集 取数据,是一个指针
v=cursor.execute("select * from student")#写sql语句,返回值是受影响的行数
print(v) #输出 3
result = cursor.fetchall()#行里面具体的数据
result1=cursor.fetchone()#取一条数据,相当于迭代器,取过一次就取不出来了
cursor.fetchmany(2)#取n条数据
print(result)
print(result1)
2.sql注入
user = input("用户名:")
pwd = input("密码:")
conn = pymysql.connect(host=‘127.0.0.1‘,port=3306,user=‘root‘,password=‘root‘,database=‘new‘,charset=‘utf8‘)#建立连接,能去=取到内容
cursor = conn.cursor()#去数据库返回的结果集 取数据,是一个指针
sql = ‘select * from userinfo where username="%s" and password="%s"‘ %(user,pwd)
v=cursor.execute(sql)#写sql语句,返回值是受影响的行数
#print(v) #输出 3
result = cursor.fetchall()#行里面具体的数据

用户如果输入
用户名:ee" or 1=1 --
密码:
输出结果
((1, ‘dodo‘, ‘123‘), (2, ‘www‘, ‘111‘))


解决方法
v=cursor.execute(‘select * from userinfo where username=%s and password=%s‘,[user,pwd])#写sql语句,返回值是受影响的行数,加上后面的参数

3.改,删,增,要提交
v = cursor.execute(‘insert into userinfo(username,password) values(%s,%s)‘,[‘alex‘,‘000‘])
conn.commit()#增,改,删,不提交是不会生效的

4.获取新数据的自增id
cursor.execute(‘insert into class(caption) values(%s)‘,[‘一年一班‘])
new_id = cursor.lastrowid
cursor.execute(‘insert into student(sname,gender,class_id) values(%s,%s,%s)‘,[‘明明‘,‘男‘,new_id])
conn.commit()#增,改,删,不提交是不会生效的

5.字典的形式输出查询结果
conn = pymysql.connect(host=‘127.0.0.1‘,port=3306,user=‘root‘,password=‘root‘,database=‘new‘,charset=‘utf8‘)#建立连接,能去=取到内容
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)#不是元组形式,变成字典的形式
cursor.execute(‘select * from class‘)
result = cursor.fetchall()
print(result)

cursor.close()
conn.close()




day11