数据库补充复习(二),创建数据库连接
1.注:连表 left join on
表1 left join 表二 on
如果表1中的数据多,表2少,就用null补
right join
inner join 只要有null,那么整行数据就会被舍弃
平均值:avg获取平均值
临时表:查询操作的结果会以临时表的状态呈现
(1)子查询:
select(select caption from 表 where cid=score.sid limit 0,1),'shuxue',1,sid,num from score;
(2)表的关联:
2.数据库连接
(1)正常连接操作
#author: wylkjj
#date:2019/5/23
import pymysql
#创建连接
conn = pymysql.connect(host="127.0.0.1",port=3306,user="root",
password="1234",db="jsp02",charset='utf8')
#创建游标
cursor = conn.cursor()
#执行sql,并返回收影响行数
effect_row = cursor.execute("insert into users(UserID,UserName,UserPwd,UserAnnCount,UserPhone) "
"values('201145','ericw','123456','2','123455467')")
#提交,不然无法保存新建或者修改的数据
conn.commit()
#关闭游标
cursor.close()
#关闭连接
conn.close()
(2)变量操作
import pymysql
#创建连接
conn = pymysql.connect(host="127.0.0.1",port=3306,user="root",
password="1234",db="jsp02",charset='utf8')
#创建游标
cursor = conn.cursor()
#执行sql,并返回收影响行数
#第一种方式字符串拼接,可以运行但是严令禁止使用,因为会造成sql注入
inp=input('请输入name:')
sql = "insert into user(name) values ('%s')"
sql = sql %(inp,) #对sql语句的输入进行格式化(字符串拼接)
r = cursor.execute(sql)
#第二种方式参数传递
inp=input('请输入name:')
r = cursor.execute("insert into user(name) values (%s)",inp)#内部机制会自动进行参数传递
#提交,不然无法保存新建或者修改的数据
conn.commit()
#关闭游标
cursor.close()
#关闭连接
conn.close()
(3)cursor.executemany() 内部做了循环可进行多条语句插入
l=[
('123',12,'adsasd'),
('123',10,'adsasd'),
('123',102,'adsasd')
] #列表
r=cursor.executemany("insert into user(name) values (%s)",l)
#其它均一样
(4)增删改查操作同之前的一样
execute()进行查找的时候返回的是数据的条数
注:execute()执行sql语句后用fetchall()去内存取出并打印数据
fetchall()查找并打印所有数据条数,并以元组方式打印(要会,重要)
fetchone()第一条数据(要会,重要)
fetchmoney(3)取三条,可任意取
注:移动指针所在位置
scroll(1,mode='relative')#相对当前位置移动,-1就是后移动
scroll(2,mode='absolute')#相对绝对位置移动
(5)sql注入:注释漏洞 --
('eric" or 1=1 -- ',123456)#要加空格,否则不满足注释条件
(6)游标参数
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
查询操作的返回值就会从默认的元组变成字典形式打印
(7)信息的ID,插入数据时所在第几条数
nid = cursor.lastrowid
print(nid)#注:如果插入多条数据,只返回最后一条的ID
(8)反射:
#author: wylkjj
#date:2019/5/26
from src import comments
# comments.add()#正常情况下
#反射
func_name = 'add'#comments中的函数add
func = getattr(comments,func_name)
func()
(9)通过字符串动态导入模块
model = 'src.comments'
func_name = 'add'
import importlib
m=importlib.import_module(model)
func=getattr(m,func_name)
func()
print(m)