python 语言,如何拼接sql

Python018

python 语言,如何拼接sql,第1张

下文将教您如何创建mysql存储过程,并附上了详细的步骤,如果您在mysql存储过程方面遇到过问题,不妨一看,对您会有所帮助。

--选择数据库

mysql>

use

test

database

changed

--创建示例用表

mysql>

create

table

zzm(

->

id

int

primary

key

auto_increment,

->

name

varchar(10)

->

)

query

ok,

0

rows

affected

(0.20

sec)

mysql>

insert

into

zzm(name)

values('zhang')

query

ok,

1

row

affected

(0.08

sec)

mysql>

insert

into

zzm(name)

values('zeng')

query

ok,

1

row

affected

(0.05

sec)

mysql>

insert

into

zzm(name)

values('ming')

query

ok,

1

row

affected

(0.05

sec)

mysql>

select

*

from

zzm

+----+-------+

|

id

|

name

|

+----+-------+

|

1

|

zhang

|

|

2

|

zeng

|

|

3

|

ming

|

+----+-------+

3

rows

in

set

(0.00

sec)

--更改命令结束符(因为在procedure中经常要用到默认的命令结束符--分号()

--所以在创建procedure的时候需要定义新的结束符以说明创建procedure的命令结束)

--这里将结束符号改成美元符号--$

mysql>

delimiter

$

--创建mysql存储过程p3

--此存储过程的过程名是p3,该过程包含两个参数

--一个是输入类型的(以in标示),参数名是nameid,类型是int,

--一个是输出类型的(以out标示),参数名是person_name,类型是varchar(10)

--此存储过程的作用是查询出zzm表的全部内容,会输出结果集(data

set),然后

--再查询表中记录的id是nameid的字段name,将其输出到第二个输出类型的参数里面,这个查询

--不会输出结果集。

mysql>

create

procedure

p3(in

nameid

int,

out

person_name

varchar(10))

->

begin

->

select

*

from

test.zzm

->

select

zzm.name

into

person_name

from

test.zzm

where

zzm.id

=

nameid

->

end

->

$

query

ok,

0

rows

affected

(0.00

sec)

可以使用现成的包

python-sql is a library to write SQL queries in a pythonic way.

Nutshell

Import:

>>>from sql import *

>>>from sql.aggregate import *

>>>from sql.conditionals import *

Simple selects:

>>>user = Table('user')

>>>select = user.select()

>>>tuple(select)

('SELECT * FROM "user" AS "a"', ())

>>>select = user.select(user.name)

>>>tuple(select)

('SELECT "a"."name" FROM "user" AS "a"', ())

>>>select = user.select(Count(Literal(1)))

>>>tuple(select)

('SELECT COUNT(%s) FROM "user" AS "a"', (1,))

>>>select = user.select(user.id, user.name)

>>>tuple(select)

('SELECT "a"."id", "a"."name" FROM "user" AS "a"', ())

首先是解析XML漏洞。如果您的应用程序加载和解析XML文件,那么您可能正在使用XML标准库模块。有一些针对XML的常见攻击。大多数是DoS风格(旨在破坏系统而不是窃取数据)。这些攻击很常见,尤其是在解析外部(即不受信任的)XML文件时。一种这样的攻击是“十亿笑”,因为加载的文件包含许多(十亿)“笑”。您可以加载XML实体文件,当XML解析器尝试将此XML文件加载到内存中时,它将消耗许多GB的内存。

其次是SQL注入漏洞。SQL注入漏洞的原因是用户输入直接拼接到SQL查询语句中。在pythonweb应用程序中,orm库一般用于数据库相关的操作。例如,Flask和Tornado经常使用SQLAlchemy,而Django有自己的orm引擎。.但是如果不使用ORM,直接拼接SQL语句,就有SQL注入的风险。

再者是输入函数漏洞。在Python2的大量内置特性中,输入是一场彻底的安全灾难。一旦调用它,从标准输入读取的任何内容都会立即解析为Python代码,显然,除非脚本的标准输入中的数据完全可信,否则决不能使用输入函数。Python2文档建议将rawinput作为安全的替代方案。在Python3中,input函数等价于rawinput,一劳永逸地解决了这个陷阱。

要知道SSTI是ServerSideTemplateInjection,是Web开发中使用的模板引擎。模板引擎可以将用户界面和业务数据分离,逻辑代码和业务代码也可以相应分离,代码复用变得简单,开发效率也提高了。模板在服务器端使用,数据由模板引擎渲染,然后传递给用户,可以为特定用户/特定参数生成对应的页面。我们可以对比一下百度搜索,搜索不同词条得到的结果页面是不一样的,但是页面的边框基本是一样的。