mysql
下载路径:
https://dev.mysql.com/downloads/

[
root
@
2
~
]
# vim py001.py
a
=
3
b
=
4
print
(
a
+
b
)
print
(
a
**
2
+
b
**
2
)
[
root
@
2
~
]
# python py001.py
7
25
[
root
@
2
~
]
# python3
>>>
import
random
>>>
random
<
module
'random'
from
'/usr/lib64/python3.6/random.py'
>
>>>
quit
()
[
root
@
2
~
]
# vim /usr/lib64/python3.6/random.py
上午
1
、通过
frp
内网穿透共享数据库信息
[root@1 ~]
# mysql -p'
密码
'
mysql> create user
'li'
@
'%'
identified by
'1'
;
mysql> create database test;
mysql> grant all on test.* to
'li'
;
[root@1 ~]
# tar -xf frp_0.33.0_linux_amd64.tar.gz
[root@1 ~]
# cd frp_0.33.0_linux_amd64/
[root@1 frp_0.33.0_linux_amd64]
# vim frpc.ini
[common]
server_addr
=
123
.249.27.70
server_port
=
7000
token
=
15773141955
[mysql]
type
=
tcp
local_ip
=
127
.0.0.1
local_port
=
3306
remote_port
=
6000
[root@1 frp_0.33.0_linux_amd64]
# ./frpc -c frpc.ini
访问公网
ip
的
7500
端口,查看控制面板

在数据库连接工具上,使用公网
ip
与自己规定的端口号访问数据库

对
test
数据库具有所有权限

2
、在
python
中连接数据库并结合游标对数据库进行操作
前提:要有
python3
环境
pip3 config set global.index-url
https://pypi.tuna.tsinghua.edu.cn/simple
//
设置
pip3
的全
局配置,将默认的
Python
包索引源(
index-url
)修改为清华大学的镜像源
https://pypi.tuna.tsinghua.edu.cn/simple
上面命令执行失败:执行该命令
[root@2 ~]# python3 -m pip install --upgrade pip
1
、设置清华镜像站(从国内下载安装包,提高下载和安装工具速度)
2
、安装
pandas
数据分析工具(
pandas
是知名的数据分析工具,
pandas
有完整的读取数据的工具,
以及
DateFrame
数据框架,用于保存从数据库中读取的数据)
3
、安装
pymysql
连接器(
oracle
为开发者提供的
python
管理
mysql
的工具,通过这个工具,就可以
在不替换原有代码的情况下,应对数据库软件的升级)
[
root
@2
~
]
# python3 -m pip install --upgrade pip #
将
pip
工具升级到最新版本
[
root
@2
~
]
# pip3 config set global.index-url
https://pypi.tuna.tsinghua.edu.cn/simple #
设置
pip3
的全局配置
[
root
@2
~
]
# pip3 install pandas #
安装
Python
的
pandas
库
[
root
@2
~
]
# pip3 install pymysql #
用于安装
pymysql
库
[
root
@2
~
]
# python3
>>>
import
pymysql
as
py
#
以别名
py
导入
pymysql
库,可以使用更简洁的别名
py
来调用
pymysql
库中的函数和方法
>>>
import
pandas
as
pd
#
以别名
py
导入
pandas
库
>>>
py
#
表示
Python
成功识别了导入的
pymysql
库,并能够展示关于这个模块的一些基本信
息,包括它的位置
<
module
'pymysql'
from
'/usr/local/lib/python3.6/site
packages/pymysql/__init__.py'
>
>>>
pd
#
表示
Python
成功识别了导入的
pandas
库
<
module
'pandas'
from
'/usr/local/lib64/python3.6/site
packages/pandas/__init__.py'
>
>>>
conn
=
py
.connect
(
#
使用
pymysql
库建立了一个到指定
MySQL
数据库的连接,变量
conn
成
功保存了这个数据库连接,可以通过它进行后续的数据操作
... host
=
'123.249.27.70'
,
...
user
=
'abcd'
,
...
password
=
'abcd'
,
...
database
=
'test'
,
... port
=
6001
)
;
>>>
conn
#
表明您成功创建了一个与
MySQL
数据库的连接对象
conn
,
0x7f529dda29b0
是这个连
接对象在内存中的地址
<
pymysql
.connections.Connection
object
at
0x7f529dda29b0
>
>>>
cursor
=
conn
.cursor
()
#
创建一个游标对象
cursor
>>>
cursor
<
pymysql
.cursors.Cursor
object
at
0x7f52b7ade710
>
>>>
sql
=
"select * from student"
#
定义了一个
SQL
查询语句
>>>
sql
'select * from student'
>>>
cursor
.execute
(
sql
)
#
将您定义的
SQL
语句
select * from student
发送到数据库服务器
执行
5
#
查询的结果会被存储在游标内部,您可以通过后续的操作来获取和处理这些结果
>>>
cursor
.fetchall
()
#
获取所有的查询结果,以元组的形式返回一个包含所有行数据的列表
((
1
,
'
章三
'
,
'
男
'
)
,
(
2
,
'
李四
'
,
'
女
'
)
,
(
3
,
'
小凤仙
'
,
'
女
'
)
,
(
4
,
'
章丘铁锅
'
,
'
男
'
)
,
(
6
,
'
孙颖莎
'
,
'
女
'
))
>>>
cursor
.description
#
返回一个描述结果集中列的元组序列,通常包括列名、数据类型、显
示大小、内部大小、精度、小数位数和是否可为空等
((
'id'
,
3
, None,
11
,
11
,
0
,
False
)
,
(
'name'
,
253
, None,
180
,
180
,
0
,
False
)
,
(
'gender'
,
253
, None,
16
,
16
,
0
,
False
))
>>>
res
=
cursor
.fetchall
()
>>>
res
((
1
,
'
章三
'
,
'
男
'
)
,
(
2
,
'
李四
'
,
'
女
'
)
,
(
3
,
'
小凤仙
'
,
'
女
'
)
,
(
4
,
'
章丘铁锅
'
,
'
男
'
)
,
(
6
,
'
孙颖莎
'
,
'
女
'
))
>>>
head
=
[]
#
创建一个
head
列表
>>>
desc
=
cursor
.description
>>>
for
var
in desc
:
...
print
(
var
)
...
(
'id'
,
3
, None,
11
,
11
,
0
,
False
)
(
'name'
,
253
, None,
180
,
180
,
0
,
False
)
(
'gender'
,
253
, None,
16
,
16
,
0
,
False
)
>>>
for
var
in desc
:
...
print
(
var
[
0
])
...
id
name
gender
>>>
for
var
in desc
:
... head
.append
(
var
[
0
])
...
>>>
head
[
'id'
,
'name'
,
'gender'
]
>>>
pd
.DataFrame
(
data
=
res,
columns
=
head
)
#
使用了
pandas
库创建了一个
DataFrame
,
data=res
表示数据内容,
columns=head
指定了列名
id name gender
0 1
章三 男
1 2
李四 女
2 3
小凤仙 女
3 4
章丘铁锅 男
4 6
孙颖莎 女
下午
1
、制作
python
脚本操作数据库
[
root
@
2
~
]
# vim python_mysql.py
import
pymysql
as
pm
import
pandas
class
Python_Mysql_01
(
object
):
#
定义了一个名为
Python_Mysql_01
的类,用于与
MySQL
数据库进行交互并将查询结果转换为
pandas
的
DataFrame
def
__init__
(
self
):
#
类的初始化方法,用于标识类的实例化操作
print
(
"test"
)
def
getConn
(
self
):
#
用于建立与指定
MySQL
数据库的连接,并返回连接对象
conn
conn
=
pm
.
connect
(
host
=
'123.249.27.70'
,
user
=
'abcd'
,
password
=
'abcd'
,
database
=
'test'
,
port
=
6001
)
# print(conn)
return
conn
def
getRes
(
self
,
cursor
,
sql
):
#
接收一个游标对象
cursor
和一个
SQL
语句
sql
。执行
SQL
语句并获取查询结果
data
,提取表头信息
head
,然后将结果和表头组成
DataFrame
并
返回
cursor
.
execute
(
sql
)
#
获得查询的数据
data
=
cursor
.
fetchall
()
#
表头
head
=
[
item
[
0
]
for
item
in
cursor
.
description
]
#
组成
pandas
数据框
DataFrame
return
pandas
.
DataFrame
(
data
=
data
,
columns
=
head
)
if
__name__
==
"__main__"
:
#
初始化
Python_Mysql_01
类,创建实例,
pmp
,之后所有的方法都可以在实例中
>
调用
pmp
=
Python_Mysql_01
()
#
实例化
Python_Mysql_01
类为
pmp
#
获得
conn
conn
=
pmp
.
getConn
()
#
通过
pmp
调用
getConn
方法获取数据库连接
conn
#
获得游标
cursor
=
conn
.
cursor
()
#
从
conn
获取游标
cursor
# print(cursor)
df
=
pmp
.
getRes
(
cursor
,
"select * from student"
)
print
(
df
)
#
调用
pmp
的
getRes
方法执行
select * from student
语句,并将结果存储在
df
中,最后打印
df
[
root
@
2
~
]
# python3 python_mysql.py
test
id
name gender
0 1
章三 男
1 2
李四 女
2 3
小凤仙 女
3 4
章丘铁锅 男
4 6
孙颖莎 女
2
、总结
(
1
)和
shell
脚本一样
python
文件也可以称为
py
脚本,也是将
python
指令做一个集合
(
2
)为了脚本更加的智能化和自动化,添加选择语句(智能)循环语句(自动化)
(
3
)同时为了开发效率,可读性,做了方法,类,模块
3
、修改脚本(添加
input
语句)
conn
=
pm
.
connect
(
host
=
input
(
"sign host_ip|name:"
),
user
=
input
(
"sign database username:"
),
password
=
input
(
"sign database password:"
),
database
=
input
(
"sign database name:"
),
port
=
int
(
input
(
"sign port no"
))
)
......
tablename
=
input
(
"sign tablename"
)
df
=
pmp
.
getRes
(
cursor
,
"select * from "
+
tablename
)
[
root
@
2
~
]
# python3 python_mysql.py
test
sign host_ip
|
name
:
123.249.27.70
sign database username
:
abcd
sign database password
:
abcd
sign database name
:
test
sign port no
6001
sign tablenamestudent
id
name gender
0 1
章三 男
1 2
李四 女
2 3
小凤仙 女
3 4
章丘铁锅 男
4 6
孙颖莎 女
4
、打包脚本生成可执行文件
pyinstaller --onefile python_mysql.py
--onefile
选项表示将所有的依赖和代码打包到一个单独的文件中,这样生成的可执行文件更便于
分发和使用。
完成打包后,会在当前目录的
dist
文件夹中找到生成的可执行文件。可以将这个可执行文件拷贝
到其他机器上(即使该机器没有安装
Python
环境)运行。
[
root
@
2
~
]
# pip3 install pyinstaller #
安装
PyInstaller
库,用于将
Python
程序
打包成可执行文件
[
root
@
2
~
]
# which pyinstaller #
在系统的环境变量路径中查找
pyinstaller
可执行文件
的位置
[
root
@
2
~
]
# pyinstaller --onefile python_mysql.py #
使用
PyInstaller
将名为
python_mysql.py
的
Python
脚本打包成一个独立的可执行文件
[
root
@
2
~
]
# ls
anaconda
-
ks
.
cfg dist __pycache__ python_mysql
.
py v
build py001
.
py python_mysql_01
.
spec python_mysql
.
spec
[
root
@
2
~
]
# cd dist/
[
root
@
2
dist
]
# ls
python_mysql
[
root
@
2
dist
]
# ./python_mysql
test
sign host_ip
|
name
:
123.249.27.70
sign database username
:
abcd
sign database password
:
abcd
sign database name
:
test
sign port no
:
6001
sign tablename
:
student
id
name gender
0 1
章三 男
1 2
李四 女
2 3
小凤仙 女
3 4
章丘铁锅 男
4 6
孙颖莎 女
[
root
@
2
~
]
# python3 -m http.server 8000 #
会在当前目录下启动一个简单的
HTTP
服务
器,监听端口
8000
[
root
@
2
~
]
# nohup python3 -m http.server 8000& #
将执行放入后台
[
1
]
12237
[
root
@
2
~
]
# nohup:
忽略输入并把输出追加到
"nohup.out"
#
浏览器访问
ip
加端口号

5
、总结
(
1
)
python
脚本完成并配置成功之后,将脚本部署为一个二进制的可执行文件
(
2
)因为
py
文件要被执行需要在
linux
中安装
python
环境
(
3
)但是二进制可执行文件,不要环境,在任何
linux
主机上都可以执行
(
4
)步骤
安装
pyinstaller
pip3 install pyinstaller
使用
pyinstaller
生成可执行文件
pyinstaller
--
onefile xxx
.
py
# py
文件中必须是有
if __name__=="__main__";
# xxxx
python
模块发布
web
服务
python3
-
m http
.
server
9971