python操作数据库语句_Python基础 | Python操作数据库

最最最最常用的增删改查语句

1. create table 表名(

属性1 数据类型 约束,

属性2 数据类型 约数,

...

)

2. insert into 表名(属性1,属性2...) values(值1,值2...)

3. delete from 表名 where 条件

4. update 表名 set 属性1=值1,属性2=值2... where 条件

5. select 属性1,属性2... from 表明 where 条件

操作SQLite3数据库

1. 从Python3.x版本开始,再标准库中已经内置了SQLite3模块,它可以支持SQLite3数据库的访问和相关的数据库操作.

(1) Python语言使用SQLite3数据库只要导入SQLite3模块即可

2. Python语言操作SQLite3数据库的基本流程如下:

(1) 导入相关库或模块( import sqlite3)

(2) 使用connect()链接数据库并获取数据库连接对象. 它提供了一下方法:

1) cursor() 创建一个游标对象

2) commit() 处理事务提交

3) rollback() 处理事务回滚

4) close() 关闭一个数据库连接

(3) 使用con.cursor()获取游标对象

(4) 使用游标对象的方法(execute(),executemany(),fetchall()等)来操作数据库,实现插入,修改和删除操作,并查询获取显示相关的记录.

(5) 在Python程序中,连接函数sqlite3.connect()有两个常用参数:

1) database: 表示要访问的数据库名 (数据库地址)

2) timeout: 表示访问数据的超时设定

(6) 使用close()关闭游标对象和数据库连接. 数据库操作完成之后,必须及时调用其close()方法关闭数据库连接,这样做的目的是减轻数据库服务器的压力.

3. 数据库知识补充, 增删改操作如果没有异常则提交事务,如果有异常则进行事务的回滚. 查询则不用进行事务的操作.

使用SQLite3创建表

# code01_操作sqlite创建表.py

"""

1. 导入sqlite3模块

2. 创建连接 sqlite3.connect(数据库路径,超时时间)

3. 创建游标对象

4. 编写创建表的sql语句

5. 执行sql语句

6. 关闭游标,关闭连接

"""

import os

import os.path

import sqlite3

def main():

db_path = os.path.abspath(r"./DB/code01.db")

con = sqlite3.connect(db_path) # 这里创建连接,返回一个连接对象

cur = con.cursor()

sql = """\

create table t_person(

pno integer primary key autoincrement,

pname varchar not null ,

age integer

)

""" # 使用文档字符串可以直接输入文本

try:

cur.execute(sql)

print("创建表成功")

except BaseException as e:

print(e)

print("创建表失败")

finally:

# 1. 关闭游标 2. 关闭连接

cur.close()

con.close()

if __name__ == "__main__":

main()

使用SQLite插入数据

调用游标对象的execute(sql,(值))执行插入sql

使用 executemany(sql,[(值1),(值2)...])执行多条sql语句

使用executemany()比循环使用excute()执行多条sql语句效率高

# code02_操作sqlite3向数据库插入一条数据.py

import sqlite3

import os

def main():

try:

db_path = os.path.abspath(r"./DB/code01.db")

con = sqlite3.connect(db_path)

cur = con.cursor()

# 1. 自增长的字段是不需要插入数据的

# 2. 这里的字段值使用 ? 来占位

sql = """\

insert into t_person(pname,age) values(?,?)

"""

para = ("张三", 24)

cur.execute(sql, para) # 插入第一条数据

cur.execute(sql, ("李四", 24))

con.commit() # 如果插入没有没有问题就进行事务的提交

print("插入数据成功")

except BaseException as e:

print(e)

print("插入数据失败")

con.rollback() # 如果插入失败,要进行事务回滚

finally:

cur.close()

cur.close()

if __name__ == "__main__":

main()

# code03_操作sqlite3向数据库插入多条数据.py

import os

import sqlite3

def main():

db_path = os.path.abspath(r"./DB/code01.db")

try:

con = sqlite3.connect(db_path)

cur = con.cursor()

sql = """\

insert into t_person(pname,age) values(?,?)

"""

# 执行多次语句 cur.excutemany(sql,[(值1),(值2)...])

cur.executemany(sql, [("刘一", 21), ("陈二", 22), ("王五", 25), ("赵六", 26), ("孙七", 27), ])

con.commit() # 插入没有异常则进行事务的提交

print("插入数据成功")

except BaseException as e:

print(e)

print("插入数据失败")

con.rollback() # 数据插入失败要进行事务回滚

finally:

cur.close()

con.close()

if __name__ == "__main__":

main()

使用SQLite3查询数据

查询数据,游标对象提供了 fetchall() 和 fetchone()

fetchall() 获取所有数据,返回一个列表.

fetchone() 获取其中其中一个结果,返回一个元组

# code04_操作sqlite3查询所有数据.py

import os

import sqlite3

def main():

db_path = os.path.abspath(r"./DB/code01.db")

try:

con = sqlite3.connect(db_path)

cur = con.cursor()

sql = """\

select * from t_person

"""

cur.execute(sql) # 执行查询语句

# 增删改查,只有查询是不需要提交事务的

person_all = cur.fetchall() # 获取结果集(返回的是元组)

# print(person_all)

for person in person_all:

print(person)

except Exception as e:

print(e)

print("查询失败")

finally:

cur.close()

con.close()

if __name__ == "__main__":

main()

# code05_操作sqlite3查询一条数据.py

import os

import sqlite3

def main():

db_path = os.path.abspath(r"./DB/code01.db")

try:

con = sqlite3.connect(db_path)

cur = con.cursor()

sql = """\

select * from t_person

"""

cur.execute(sql)

person = cur.fetchone() # 只获取一条数据

print(person)

except Exception as e:

print(e)

print("查询失败")

finally:

cur.close()

con.close()

if __name__ == "__main__":

main()

使用sqlite3修改数据

# code06_操作sqlite3修改数据.py

import os

import sqlite3

def main():

db_path = os.path.abspath(r"./DB/code01.db")

try:

con = sqlite3.connect(db_path)

cur = con.cursor()

sql = """\

update t_person set pname=? where pno=?

"""

cur.execute(sql, ("张三三", 1))

con.commit()

# 查询验证结果

cur.execute("select * from t_person where pno=?", (1,))

person = cur.fetchone()

print(person)

except Exception as e:

print(e)

print("修改数据失败")

con.rollback()

finally:

cur.close()

con.close()

if __name__ == "__main__":

main()

使用sqlite3删除数据

# code07_操作sqlite3删除数据.py

import os

import sqlite3

def main():

db_path = os.path.abspath(r"./DB/code01.db")

try:

con = sqlite3.connect(db_path)

cur = con.cursor()

cur.execute("delete from t_person where pno=?", (1,))

con.commit()

print("删除成功")

except Exception as e:

print(e)

print("删除失败")

con.rollback()

finally:

cur.close()

con.close()

if __name__ == "__main__":

main()

下载安装MySQL

手动配置MySQL非常麻烦...

推荐使用可视化的集成环境 PHPStudy, XMAPP (不要花费一堆时间在配置环境上,多花时间在业务上)

操作MySQL数据库

搭建pymysql环境

1. 在使用pymysql之前,我们需要确保pymysql已安装. 如果还未安装,我们可以使用一下命令安装最新版的pymysql

pip install pymysql

2. 如果无法在线安装,进入python官网 www.python.org, 点击PyPI, 下载 xxx.whl, 然后本地使用pip进行安装

pip install xxx.whl

参数化

1. sql语句的参数化,可以有效防止sql注入

2. 注意: 此处不同于Python的字符串格式化,全部使用%s占位(sqlite3中使用的是?占位)

创建数据库表

# code08_操作mysql创建数据表.py

# 导入相应数据库模块

import pymysql

def main():

# sqlite3 是python3内置的,直接新建一个 xxx.db 就是一个数据库

# sqlite3.connect(数据库地址)

# 相对来说mysql就要正式很多了

# (*args,**kwargs) (host=None, user=None, password="",database=None, port=0)

try:

con = pymysql.connect("localhost", "root", "root", "python_db", 3306)

# 理解函数的可变参数,一定要按顺序传递 arg *args **kwargs

# con = pymysql.connect("localhost", user="root", password="root", database="python_db", port=3306)

cur = con.cursor() # 创建游标对象

sql = """\

create table t_student(

sno int primary key auto_increment,

sname varchar(30) not null,

age int(2),

score float(3,1)

)

"""

cur.execute(sql)

except BaseException as e:

print(e)

print("数据表创建失败")

finally:

cur.close()

con.close()

if __name__ == "__main__":

main()

数据库插入操作

其实mysql和sqlite在python中的操作基本一致

需要注意(1)不同数据库的数据类型不同 (2) 参数化一个是 ? 一个是 %s

这里以插入为例子,后面不再赘述

# code09_操作mysql插入数据.py

import pymysql

def main():

try:

con = pymysql.connect(host="localhost", user="root", password="root", port=3306, database="python_db")

cur = con.cursor()

insert_sql = """\

insert into t_student(sname,age,score) values(%s,%s,%s)

"""

para = [("刘一", 21, 98.5), ("陈二", 22, 96.0), ("张三", 23, 95.9), ("李四", 24, 93.5), ("王五", 25, 97.2)]

cur.executemany(insert_sql, para) # 注意execute() 和 executemany()

con.commit()

print("插入数据成功")

except Exception as e:

print(e)

print("插入数据失败")

con.rollback() # 增删改如果是要都要进行回滚

finally:

cur.close()

con.close()

if __name__ == "__main__":

main()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
宾馆客房管理系统的数据流DFD)和实体-关系(E-R)是用于描述系统的数据流和数据结构的工具。下面是对宾馆客房管理系统的DFD和E-R的简要介绍: 数据流DFD)是一种形化的工具,用于描述系统中数据的流动和处理过程。在宾馆客房管理系统中,DFD可以包括以下几个主要组成部分: 1. 上层数据流(Context Diagram):该显示了宾馆客房管理系统与外部实体之间的交互,例如顾客、前台、房间清洁人员等。它展示了系统的整体概览,不涉及具体的内部处理过程。 2. 一级数据流(Level 1 DFD):该展示了宾馆客房管理系统的主要功能模块和数据流之间的关系。例如,可以包括预订房间、入住登记、退房结算等功能模块,并显示它们之间的数据流动。 3. 二级数据流(Level 2 DFD):在一级数据流的基础上,进一步展开了各个功能模块的内部处理过程和数据流动。例如,可以展示预订房间模块中的验证客房可用性、生成订单等具体步骤。 实体-关系(E-R)是一种用于描述系统中实体、属性和它们之间关系的形化工具。在宾馆客房管理系统中,E-R可以包括以下几个主要组成部分: 1. 实体(Entity):例如顾客、房间、订单等,它们是系统中需要存储和管理的主要对象。 2. 属性(Attribute):描述实体的特征或属性,例如顾客的姓名、房间的类型、订单的状态等。 3. 关系(Relationship):描述实体之间的关系,例如顾客与订单之间的关系、房间与订单之间的关系等。 通过E-R,可以清晰地了解宾馆客房管理系统中各个实体之间的关系以及它们的属性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值