Python的模块与包,使用pymysql库操作Mysql数据库
目录
python中将一个.py文件称为模块文件,模块文件可以放在包中和根目录中,包中也可以创建子包
,在同一个模块中代码过多的话,会导致对象和函数名会产生重复的情况,代码可读性会下降
一般建议一个模块中代码不超过500行
以下是关于Python模块与包使用的详细说明及示例代码的运行结果分析:
一、模块导入的基本方法
先创建一个新的模块包含变量和函数,我新建这个模块表示为:test
#test.py:
var1=20
def calc1():
print("这是函数1")
def calc2():
print("这是test中的函数2")
以下内容在另一个模块中实现,我这个模块表示为:pythonbase3
1.导入另一个模块全部内容的方式:
#一、使用方式:在不同的模块文件中使用其他模块中封装好的函数和变量
#1.导入全部内容的方式:先要新建一个模块“test.py”,然后导入test.py这个模块下的所有内容(包含函数和变量)
import test
#使用模块test中定义好的变量
# 调用模块和被调用模块之间是平级的关系
print(test.var1)
print("\n")
#使用模块1中定义好的函数,这里使用print会产生问题:返回None值
print(test.calc1())
print(test.calc2())
print("\n")
#直接使用,不会出现None问题
test.calc1()
test.calc1()
print("\n")
运行结果:
2.选择性导入内容的方式:
from test import calc1
calc1()
print("\n")
from test import var1
print(var1)
运行结果:
3.同时导入一个模块中多种数据的方式:
# #3.若想要同时导入多个数据,请用逗号隔开
from test import var1,calc1,calc2
print(var1)
calc1()
calc2()
运行结果:
4.取别名:
#4.使用*将一个模块中所有的变量和函数导入进来会导致重名等问题
from test import *
print(var1)
calc1()
calc2()
#5.如果重名,则需要给另一个取别名,使用as,仅限于当前模块使用
from test import calc2 as c
def calc2():
print("这是函数2")
calc2()
c()
运行结果:
二、模块文件在包中时,函数和变量的调用
首先在项目中新建一个包,在包中新建一个模块,我新建这个模块表示为:day03.test
var1=20
def calc1():
print("这是day03.test中的函数1")
def calc2():
print("这是day03.test中的函数2")
以下内容在另一个模块中实现,我这个模块表示为:pythonbase3
1.使用import调用:
#1.import
import day03.test
#调用变量
print(day03.test.var1)
#调用函数
day03.test.calc2()
day03.test.calc1()
运行结果:
2.使用from调用:
#2.from
from day03.test import var1,calc1,calc2
calc2()
#
# #3.调用3:*
from day03.test import *
calc2()
# #别名
from day03.test import calc2 as a
a()
#
# #如果包下面还有其他包,则继续"."
from day03.zibao.test import var1
print(var1)
三、pymysql操作Mysql数据库
1.库的安装、卸载
使用pip工具安装 Python/Scripts/pip.exe(用来安装第三方库)
使用pip install pymysql这是默认安装最新版本的库 (如果想要指定的话,在后面加上那个==具体版本号)
有两种安装方法:①使用cmd:执行pip install pymysql安装;②使用pycharm安装:file->settings->project->python interpreter,点击加号搜索相应库进行安装。
pip unistall 模块名或者库 可卸载对应模块或者库
可在终端中使用pip list 命令查看已经安装过的所有模块和库
用于网络原因,有时候下载受影响,为减少影响,我们可以换源,制定下载源地址
(我在安装pymysql这一步时最开始使用的是pycharm,出现了问题,换成cmd正常安装了,也还没弄清是啥缘故QVQ)
操作方式:打开pycharm的终端terminal,使用命令行进行安装:python -m pip install pymysql
2.数据库的连接与创建
使用 pymysql
库连接 MySQL 数据库并创建表。以下代码展示了如何连接数据库、创建表以及关闭连接。
#先导包
import pymysql
# 连接数据库
conn = pymysql.connect(
host="127.0.0.1", # IP
port=3306, # 端口
user="root", # 用户名
password="123456", # 密码
database="muchang" # 数据库名
)
# 申请游标
cur = conn.cursor()
# 创建表的 SQL 语句,通过代码执行的时候,sql整体要写成字符串
s = """
CREATE TABLE tian(
first_name CHAR(20) NOT NULL,
last_name CHAR(20),
age INT,
sex CHAR(1),
income FLOAT
)
"""
# 执行 SQL
#执行sql,注意一定要把sql放进去,这里是s
cur.execute(s)
# 提交到连接对象
conn.commit()
# 关闭连接
conn.close()
对数据库数据进行增删改查,主要就是改动sql
3.数据的插入
插入数据到数据库表中。以下代码展示了如何插入一条记录。
import pymysql
# 连接数据库
conn = pymysql.connect(
host="127.0.0.1",
port=3306,
user="root",
passwd="123456",
database="python"
)
# 申请游标
cur = conn.cursor()
# 插入数据的 SQL 语句
s = "INSERT INTO `user` VALUES('张', '凯', 25, '女', 18000)"
# 执行 SQL
cur.execute(s)
# 提交执行信息
conn.commit()
# 关闭连接
conn.close()
4.数据的修改
修改数据库表中的数据。以下代码展示了如何更新一条记录。
import pymysql
# 连接数据库
conn = pymysql.connect(
host="127.0.0.1",
port=3306,
user="root",
passwd="123456",
database="python"
)
# 申请游标
cur = conn.cursor()
# 更新数据的 SQL 语句
s = "UPDATE `user` SET last_name='小丽' WHERE first_name='张'"
# 执行 SQL
cur.execute(s)
# 提交执行信息
conn.commit()
# 关闭连接
conn.close()
5.数据的删除
删除数据库表中的数据。以下代码展示了如何删除一条记录。
import pymysql
# 连接数据库
conn = pymysql.connect(
host="127.0.0.1",
port=3306,
user="root",
passwd="123456",
database="python"
)
# 申请游标
cur = conn.cursor()
# 删除数据的 SQL 语句
s = "DELETE FROM `user` WHERE first_name='张'"
# 执行 SQL
cur.execute(s)
# 提交执行信息
conn.commit()
# 关闭连接
conn.close()
6.数据的查找
查询数据库表中的数据。以下代码展示了如何查询并获取结果。
#4、数据的查找
import pymysql
#创建连接对象
conn=pymysql.connect(host="127.0.0.1",
port=3306,
user="root",
passwd="123456",
database="python"
)
#申请游标
cur=conn.cursor()
#s="INSERT INTO `user` VALUES('张三','李四',20,'女',18000)"
t="SELECT * FROM `user`"
#执行sql
#cur.execute(s)
cur.execute(t)
# 获取查询的结果:
# fetchone()是从当前游标开始的位置读取”一行“,整行内容放进到一个元组中:
# 第一次调用查询到第一条数据,第二次则是第二条数据,以此类推
info=cur.fetchone()
print(info)
info1=cur.fetchone()
print(info1)
#fetchall()实现获取查询结果中所有内容,用一个大元组来放置各个小元组
info2=cur.fetchall()
print(info2)
conn.commit()
#关闭连接
conn.close()
7.构造函数
通过构造函数实现通用的数据库操作。以下代码展示了如何封装数据库操作。
5、构造函数实现可以通用的方式
import pymysql
def str_sql(servicehost,serviceport,serviceuser,servicepasswd,servicedatabase,s):
#上面这些参数可以适当的加一些注释来进行解释
"""
:param servicehost: ip
:param serviceport: 端口
:param serviceuser: 用户名
:param servicepasswd: 密码
:param servicedatabase: 数据库名
:param s: sql语句
:return: 返回结果
"""
#创建连接对象
conn=pymysql.connect(host=servicehost,
port=serviceport,
user=serviceuser,
passwd=servicepasswd,
database=servicedatabase
)
#申请游标
cur=conn.cursor()
#s="INSERT INTO `user` VALUES('张三','李四',20,'女',18000)"
# t="SELECT * FROM `user`"
#执行sql
#cur.execute(t)
cur.execute(s)
# 获取查询的结果:
# fetchone()是从当前游标开始的位置读取”一行“,整行内容放进到一个元组中:
# 第一次调用查询到第一条数据,第二次则是第二条数据,以此类推
info=cur.fetchone()
print(info)
info1=cur.fetchone()
print(info1)
#fetchall()实现获取查询结果中所有内容,用一个大元组来放置各个小元组
info2=cur.fetchall()
# print(info2)
conn.commit()
#关闭连接
conn.close()
return info2
#使用main函数
# __name__ 是 Python 的 内置变量,表示当前模块的名字。
# "__main__" 是 Python 规定的字符串,表示“直接运行的主程序”。
# if __name__ == '__main__': 是一个标准的条件判断,用来检查当前是否是主程序。
if __name__=='__main__':
psql="SELECT * FROM `user`"
info=str_sql("127.0.0.1",3306,"root","123456","python",psql)
print(info)
关键注意事项
-
避免命名冲突:使用
from module import *
可能导致当前作用域命名被覆盖,建议用显式导入或别名。 -
包路径层级:调用子包模块需完整路径(如
day03.zibao.test
)。 -
模块大小控制:单个模块建议不超过500-700行,以保持可读性。
-
看清楚运行的是哪一个模块:运行代码途中一定要注意不要出现低级错误,例如“压根就没运行到需要去运行的代码模块”
-
python中的main函数:__name__ 是 Python 的 内置变量,表示当前模块的名字。
'__main__ '是 Python 规定的字符串,表示“直接运行的主程序”。
if __name__ == '__main__': 是一个标准的条件判断,用来检查当前是否是主程序。