nodejs调用mysql,nodejs防止sql注入
对象关系映射(ORM)使用描述对象和数据库之间映射的元数据,将程序中的对象自动映射到关系数据库中的Python类-表。
Python的类属性-字段
python中的类对象——数据库表中的一段数据
我们是面向对象的。当对象的信息发生变化时,需要将其保存在关系数据库中。程序员在自己的业务逻辑代码中混合了许多SQL语句来添加、读取、修改和删除相关数据。这些代码通常是重复的。
ORM的出现起到了对象层和数据库层之间的桥梁作用。
优点:提高我们的开发效率。
开发者技术不同,大神写的sql优化很不错。
缺点:受查询效率影响的关系数据库技能较低。
姜戈台阶
在用户面前显示页面
1.打开浏览器,输入URL,然后启动请求。
2)接受请求,根据内容
-url设置为-以后浏览器输入的路径的URL(r index/))))))))))。
https://127 . 0 . 0 . 1:8000/指数
编写用户输入URL后调用的view-content definedex(request):
returnrender(请求, index.html )).
def函数名的第一个参数是request。
Render返回模板(请求,html)
3.mvtdjango命名为models.py的模块为我们提供了orm框架。
因为有了这个框架,就不需要写各种sql语句了。
Orm类-表属性对应-字段实例对象-一行数据
属性当前选定的数据库支持的字段的类型。
呈现窗体时使用的默认html控件
在管理站点进行最小验证后,django将为表创建一个自动扩展的主键列。每个模型只能创建一个主键列。如果使用选项将属性设置为主键列,django将不再创建自动扩展的主键列。
默认情况下,创建的主键列属性是id,可以用pk代替。的所有PK都拼写为主密钥。
键入AutoField:自动增长的智能字段。通常不指定。如果没有指定,Django将自动创建一个属性名为id的自动增长属性。(必须输入参数primary_key=True。)
布尔字段:布尔字段。该值为真或假。
Nullbooleanfield:支持三个值:null、True和False。
Charfield(max_length=字符长度):字符串。
映射到数据库时的Varchar
参数max_length表示最大字符数。
TextField:一个大的文本字段。通常在超过4000个字符时使用。
整数字段:整数。
Decimalfield(max_digits=none,decimal_places=None):十进制浮点数。
参数max_digits表示总位数。
参数decimal_places表示小数点后的位数。
浮点字段:浮点数。
DateField[auto_now=False,auto_now_add=False]):日期。
auto_now参数意味着每次保存对象时,该字段自动设置为当前时间。用于更改最后一次的时间戳,总是使用当前日期,默认值为false。
auto_now_add参数表示第一次创建对象时自动设置当前时间,时间戳用于创建。这始终使用当前日期,默认值为false。
参数auto_now_add和auto_now互斥,组合将导致错误。
TimeField:时间,参数与DateField相同。
DateTimeField:日期和时间,参数与DateField相同。
上传文件字段。
图像字段:检查由文件字段继承和上传的内容,以确保它是有效的图像。
可选约束null:如果为true,则允许为null,默认值为False。
空白:如果为真,该字段可以为空。默认值为False。
相比之下,null是数据库范畴的概念,blank是表单验证的范畴。
Db_column:字段的名称。如果未指定,将使用属性的名称。
Db_index:如果该值为True,将在该字段中创建一个索引。默认值为False。
默认值:默认值。
Primary _ key:如果为true,该字段将成为模型的主键字段。默认值为False,通常用作自动字段的选项。
Unique:如果为true,则该字段在表中必须具有唯一的值。默认值为
错误.
4.我们使用mysql而不是sqllite
如何配置我们的mysql
4.1 settings.py数据库数据库={
默认:{
引擎: django.db.backends.mysql ,#数据库类型
NAME: test1 ,#数据库的名称,django不会直接为我们创建数据库。我们需要手动创建它。
用户: root ,#数据库用户
密码: 123456 ,#数据库密码
主机: 127.0.0.1 ,
端口: 3306 ,#端口号
}
}
4.2我们需要安装一个python-mysql驱动程序pymysql。
4.3我们需要将这个驱动程序添加到项目中。
在项目下的__init__文件中:import pymysql
pymysql.install_as_MySQLdb()
5.设计python的类(表)并不意味着数据库里有这个表。
5.1生成迁移文件pythonmanage.pymakemigrations。
5.2执行迁移Python manage.pymigrate。
与数据库同步,成功创建表,并插入数据。
6.调查
6.1查询ID=1=excat list=book info . objects . filetr(ID=1)的图书
list=book info . objects . filetr(id _ _ exact=1)
Mysql日志:
配置:sudovi/etc/MySQL/MySQL . conf . d/mysqld . cn f
然后执行sudo服务mysql重启。
使用以下命令打开mysql日志文件。sudo tail-f/var/log/MySQL/MySQL . log
查询1。准确的判断
2.模糊查询-包含
查询从指定的值开始。
查询以指定的值结束
3.空值查询- isnull(无论是否为空)
4.范围查询-in(是否包含在范围内)
5.比较查询- gt,gte,lt,lte:大于,大于等于,小于等于。
6.日期查询-年、月、日、周_日、小时、分钟、秒:计算日期和时间类型的属性。
f对象和q对象
f对象用于查询两个属性的比较。
逐个调用多个过滤器来表示逻辑和关系,与sql语句where部分的and关键字相同。
如果需要实现逻辑or查询,需要使用Q()对象结合操作符,Q对象定义在django.db.models中
函数聚合
使用aggregate()筛选器调用聚合函数。聚合函数包括:Avg、Count、Max、Min、Sum,这些函数在django.db.models中定义
aggregate的返回值是字典类型。
通常,使用count时不使用aggregate()过滤器。
请注意,count函数的返回值是一个数字。
查询集
返回的查询集的筛选如下:all():返回所有数据。
Filter():返回符合条件的数据。
Exclude():返回满足条件以外的数据,相当于sql语句where部分中的not关键字。
Order_by():对结果进行排序。
返回单个值的过滤器如下:get():返回满足条件的单个对象。
Count():返回当前查询结果的总数。
Aggregate():聚合并返回一个字典。
确定某个查询集中是否有数据:
Exists():确定查询集中是否有数据,如果有则返回True,如果没有则返回False。
查询集的两个特点是懒执行:查询集创建时不会访问数据库,直到数据被调用后才会被访问。调用数据的情况包括迭代、序列化和与if共享。
缓存:使用相同的查询集。第一次使用它时,您将查询数据库,然后缓存结果。当您再次使用这个查询集时,您将使用缓存的数据。
受限查询集
查询集可以被标记或切片,这相当于sql中的limit和offset子句。不支持负索引。
分割查询集并返回新的查询集。查询不会立即执行。