首页 > 代码库 > 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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。