ubuntu安装mysql服务
sudo apt-get install mysql-server
查看MySQL是否启动
ps -ajx|grep mysql
开启和停止
sudo service mysql start
sudo service mysql stop
客户端安装
ubuntu下客户端服务端均已经默认安装
sudo apt-get install mysql-client
最基本连接指令
初始化mysql设置密码等
连接
mysql -uroot -p
输入密码回车
quit或exit退出
mysql配置文件(了解)
一旦连接服务器自动获取配置文件,用户不用填写太多配置。
客户端Navicat的使用
打开后连接mysql
创建连接
连接成功
新建数据库,建表
python连接MySQL数据库
PyMysql模块
我们可以通过程序代码的方式去连接数据库,然后对数据库进行增删查改的方式,实现10000条数据的插入,像这样的使用代码的方式操作数据库就称为数据库编程。
安装pymysql第三方包
使用步骤:
实战:
查询:
import pymysql as pymysql
conn = pymysql.connect(host='localhost', port=3306, user='root', password='123456', database='test',
charset='utf8')
cs = conn.cursor()
sql = 'select * from students;'
content = cs.execute(sql)
print(content) # 返回影响的行数
print(cs.fetchall()) # 按顺序获取查询到的所有内容 fetchone()获取所有数据
cs.close()
conn.close()
增删改:(注意commit!)
import pymysql as pymysql
conn = pymysql.connect(host='localhost', port=3306, user='root', password='123456', database='test',
charset='utf8')
cs = conn.cursor()
sql = 'insert into students(sname) values("yanzu")'
cs.execute(sql)
sql = 'select * from students'
cs.execute(sql)
content = cs.fetchall()
for i in content:
print(i)
conn.commit()
cs.close()
conn.close()
SQL语句参数化
sql注入
import pymysql as pymysql
conn = pymysql.connect(host='localhost', port=3306, user='root', password='123456', database='test',
charset='utf8')
cs = conn.cursor()
while True:
find_name = input('please input the name you want to query:')
sql = 'select * from students where sname="%s"' % find_name
cs.execute(sql)
content = cs.fetchall()
for i in content:
print(i)
cs.close()
conn.close()
查询出所有数据
防止sql注入
import pymysql as pymysql
conn = pymysql.connect(host='localhost', port=3306, user='root', password='123456', database='test',
charset='utf8')
cs = conn.cursor()
while True:
find_name = input('please input the name you want to query:')
sql = 'select * from students where sname=%s'
cs.execute(sql,[find_name])
content = cs.fetchall()
for i in content:
print(i)
cs.close()
conn.close()
函数参数
函数可以当作参数去使用。
def func01():
print("func_01 is showing!")
print(func01) #函数名存放的是函数所在空间的地址
func02 = func01 #函数名也可以像变量一样赋值
func02() #函数名加小括号是执行函数名所存放的空间地址中的代码!
使用函数做参数:
def func01():
print("func_01 is showing!")
def foo(func):
func()
foo(func01)
闭包
在函数嵌套的前提下,内部函数使用了外部函数的变量,并且外部函数返回了内部函数,我们把这个使用外部函数变量的内部函数称为闭包。
def func_out(num1):
def func_inner(num2):
num = num1 + num2
return func_inner
#创建闭包实例
f = func_out(10)
f(1)
f(2)
结论:闭包可以对外部函数的变量进行保存。
案例:
def config_name(name):
def say_info(info):
print(name + ':' + info)
return say_info
a = config_name('zhangsan')
a('i am your father!')
b = config_name('lisi')
b('i am your real father!!!')
结论:闭包不仅可以保存外部函数的变量还可以提高代码的复用性
闭包修改外部变量
def func_out(num1):
def func_inner(num2):
nonlocal num1
num1 = num2 + 10
print(num1)
func_inner(10)
print(num1)
return func_inner
f = func_out(10)
修改闭包内使用的外部函数变量使用nonlocal关键字来完成