不连接MySQL的时候HTML永远是静态页面,链接到MySQL后才能动态的改变页面
首先了解动态的页面,需要用到web框架的文件
了解占位符
{{}}
在这个内部写入的是变量名字,例如abc,title等等
可以在render中写入变量名称=???来动态的改变数据
例如 {{title}}
from flask import flask,render_template
app=flask(__name__)
@app.route('/name')
def index():
return render_template("index.html",title="名字")
if __name__='__main__':
app.run()
在名为index的html中为
<h1>{{title}}</h1>
当通过flask运行网页的时候,可以发现h1中的数据改为了"名字"
运行逻辑:
1.找到index.html的文件,读取所有的内容
2.找到内容中占位符的变量,根据render中的数据改变
3.完成替换,呈现给用户
占位符可以使用for循环,使用方法
在需要进行循环更改的代码中
{% for A in B%}
/
{% endfor %}
其中B为数据来源,A为要更改的占位符中的变量名字
例如要更改li中的数据
{%for name in data%}
<ol>
<li>{{name}}</li>
</ol>
{%endfor%}
在py中的render中需要
def dongtaiwangye():
datalist=["a","b","c"]
return render_template("动态网页.html",data=datalist)
sql下载安装不细说
查看已创建的数据库
show databases; //一定要有分号
创建新数据库
create database ???; //??为名字,可以创建完之后在show databases;中查看数据是否正常
删除数据库
drop databse ???; //如上
进入数据库文件夹
use ??;
查看数据库文件夹下的所有文件
show tables;
创建表文件
create table **//表名称(
列名称 类型,
列名称 类型,
列名称 类型
)
例如:
create table tb1(id int,name varchar(16),age int)default charset=utf8;
这样就创建了一个新的表tb1
在创建表中默认为空,如果需要数据默认不是空表,则
create table tb1(
id int not null, //不允许为空
name varchar(16) null, //允许为空
age int
)default charset=utf8;
如果需要设定默认值,则可以
create table tb1(
id int default 10, //default 10为默认不输入的时候为10
name varchar(16),
age int
)default charset=utf8;
还有一个用法,primary key 主键,不允许为空,不允许重复.例如用法:
create table tb1(
id int primary key, //不允许为空,不允许重复
name varchar(16),
age int
)default charset=utf8;
还可以内部自动累加维护
create table tb1(
id int auto_increment primary key , //可以自动累加数据,自动内部维护(自增)
name varchar(16),
age int
)default charset=utf8;
需要检查表是否检查创建正确可以通过
desc 表名称
来查看表是否创建成功并正确.
常见的sql数据类型
常见的数组类型
* tinyint
有符号,取值:-128~128 (默认)
无符号,取值: 0 ~255;
如果需要默认是无符号的,则在数据类型中插入 unsigned
create table tb1(
id tinyint unsigned
) default charset=utf8;
* int
有符号,取值:-2147483648~2147483647(默认)
无符号,取值:0 ~4294967295(需要则插入unsigned)
* bigint
有符号,取值:-9223372036854775808~9223372036854775807(默认)
无符号,取值:0 ~18446744073709551615
* float
* double
* decimal
decimal可以精准到小数点,注意在使用的时候需要标注
例如
decimal (10,2)
括号内左边的数字代表总共的数字个数,即一共十个数字;右边的数字代表有多少小数点;
左边的数字(m)最大为65,右边的数字(d)最大为30;
如果输入的小数点数字个数超过了限定的数字,会四舍五入进去
例如decimal(10,2)
但是输入的是1.229,最终的保存的为1.23;
常用的字符串
* char(定长字符串) //速度快
char(10) 固定用十个字符串进行存储,哪怕没有十个,在内存中也会显示为十个字符串;
最长字符为255个
写入格式 insert into ???(???) values ("???");
* varchar(变长字符串) //较为省空间
varchar (??)
根据真实长度进行数据存储,最大为65535个字节byte
* text
可容纳65535个字符,一般用来新闻,文章;
* mediumtext
* longtext
* datatime(存储时间)
YYYY-MM-DD HH:MM:SS
* data(存储日期)
YYYY-MM-DD
插入数据
insert into ??? (表中变量名,表中变量名,表中变量名) values (???,???),(???,???);
例如
create table tb1(
salary int,
age int
)default charset=utf8;
可以单独增加一row
insert into tb1 (salary,age) values(10,10);
也可以同时插入多row
insert into tb1 (salary,age) values (10,10),(20,20);
查看数据
select * from ???; 查看所有数据
删除整个表
drop table ???;
删除数据
delete from 表名;
delete from 表名 where ??; ??代表数据的特点,例如id,salary等自定义变量,sql会根据数据的设定条件进行删除,例如:
delete from 表名 where id =10;
或者
delete from 表名 where id <=10;
delete from 表名 where id !=10;
delete from 表名 where id in (1,10);
修改数据
update 表名 set 列=值;可以同时修改多条数据,也可以添加限定条件
update 表名 set 列=值 where =条件;
例如:
update table1 set word="123"where id =10;
也可以在原有的数据中进行增加,例如原表中有age 且age=10
update table1 set age = age+10 where id =10;
则最后符合where中的age都增加了10.
查询数据
select *from 表名称;
select 列名称 from 表名称;
select 列名称 from 表名称 where ???;
通过python代码操作MySQL,需要先安装三方库
pip install pymysql
再创建py表后
首先import pymsql
A//这个是自定的链接sql的变量 = pymysql.connect(host="127.0.0.1",port=3306,user="//sql用户名",passwd="//sql密码",charset='utf8',db='unicom')
cursor = A.cursor(cursor=pymysql.cursors.dictcursor)
想要发送指令
cursor.execute("insert into admin(??,??,??) value('??','??','??')")
A.commit() // 命令指令提交
关闭
cursor.close()
A.close()
pymysql内部的占位符
%s
例如:
要输入123,111,222;
原先的方式是
cursor.execute("insert into admin(??,??,??) value('??','??','??')")
A.commit() // 命令指令提交
现在可以通过%s占位符来注入sql中
sql="insert into admin(??,??,??) value(%s,%s,%s)"
cursor.execute(sql,["123","111","222"]
A.commit() // 命令指令提交
也可以通过字典传递数据
例如同样要传输123 111 222
sql="insert into admin(??,??,??) value(%(a1)s,%(a2)s,%(a3)s)"
cursor.execute(sql,["a1"="123","a2"="111","a3"="222"]
A.commit()
可以写入python的代码来实现实时更新
再链接pymysql的前面输入
while true:
user=input("用户名:")
if user.upper()=='q':
break
pwd= input("密码:")
mobie= input("手机号:")
sql="insert into admin(??,??,??) value(%(a1)s,%(a2)s,%(a3)s)"
cursor.execute(sql,["a1"=user,"a2"=pwd,"a3"=mobie]
A.commit()
注意!!
所有的execute和commit都需要在和while true之后的同一缩进行,将所有的coon和cursor都缩进到while体中,最后才不会出现返回值等于break要求input的值.
通过pymysql来查询MySQL中的数据
import pymysql //插入pymysql
conn = pymysql.connect(host='127.0.0.1', user='root', passwd='Xiaoxiao5501', db='unicom', charset='utf8') //链接本地mysql
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
//代表创建了一个cursor指向conn的游标,其中 cursor的数据来源于mysql
sql = "select * from admin" //执行查询语句
cursor.execute(sql)
result = cursor.fetchall() //必须添加
print(result) //打印数据
conn.close()
cursor.close()
也可以通过for循环来依次每行返回数据
import pymysql
conn = pymysql.connect(host='127.0.0.1', user='root', passwd='Xiaoxiao5501', db='unicom', charset='utf8')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
sql = "select * from admin"
cursor.execute(sql)
result = cursor.fetchall()
for row in result: //for循环
print(row)
conn.close()
cursor.close()
fetchall是获取全部的sql中的数据,如果指向获取其中一个数据,则可以使用fetchone,则python只会返回最近的一个数据源.
注意!!
执行查询数据的时候不需要使用conn.commit和cursor.commit
只需要执行conn.close和cursor.close