数据库编程

SQLite

1.SQLite是嵌入式关系数据库管理系统。 它是独立的,无服务器的,零配置和事务性SQL数据库引擎。 

SQLite可以自由地用于商业或私有的任何目的。 换句话说,“SQLite是一种开源,零配置,独立的,独 立的,旨在嵌入到应用程序中的事务关系数据库引擎”。 

SQLite与其他SQL数据库不同,SQLite没有单独的服务器进程。 它直接读取和写入普通磁盘文件。 具有 多个表,索引,触发器和视图的完整SQL数据库包含在单个磁盘文件中。 
 

2.为什么要使用SQLite?

- 不需要一个单独的服务器进程或操作的系统(无服务器的)。
- SQLite 不需要配置,这意味着不需要安装或管理。
- 一个完整的 SQLite 数据库是存储在一个单一的跨平台的磁盘文件。
- SQLite 是非常小的,是轻量级的,完全配置时小于 400KiB,省略可选功能配置时小于250KiB。
- SQLite 是自给自足的,这意味着不需要任何外部的依赖。
- SQLite 事务是完全兼容 ACID 的,允许从多个进程或线程安全访问。
- SQLite 支持 SQL92(SQL2)标准的大多数查询语言的功能。
- SQLite 使用 ANSI-C 编写的,并提供了简单和易于使用的 API。
- SQLite 可在 UNIX(Linux, Mac OS-X, Android, iOS)和 Windows(Win32, WinCE, WinRT)中运行。
 

3.示例

# 导入sqqllite3模块
from datetime import datetime
from sqlite3 import connect
# 创建数据库连接对象,如果文件不存在则直接新建
conn = connect("sqlite.db")
# 创建游标
cur = conn.cursor()

方法        

commit() 事务提交

rollback() 事务回滚

close()     关闭一个数据库链接

cursor()    创建一个游标

4.配置SQLite数据库

双击项目目录下的`sqlite.db`,可直接在`Pycharm`中打开内置的数据库管理工具。

> 注意:第一次打开`Pycharm`内置数据库管理工具时,请先选中`sqlite`数据库右键,点击属性,手动完成SQLite驱动下载。

create table t_student(
    sid integer primary key autoincrement,
    sname text not null,
    sex text default '男',
    birthday text default current_date
);

5.SQLite数据类型

SQLite 数据类型是一个用来指定任何对象的数据类型的属性。SQLite 中的每一列,每个变量和表达式都有相关的数据类型。可以在创建表的同时使用这些数据类型。SQLite 使用一个更普遍的**动态类型**(与Python一致)系统。在 SQLite 中,值的数据类型与值本身是相关的,而不是与它的容器相关。

> 在SQLite 3.0版中,值被定义为什么类型只和值自身有关,和列没有关系,和变量也没有关系。(这有时被称作弱类型) 
>
> 为了最大限度的增加SQLite数据库和其他数据库的兼容性,SQLite支持列的"类型亲和性"。列的亲和性是为该列所存储的数据建议一个类型,要注意是建议而不是强迫。
>
> 在理论上来讲,任何列依然是可以存储任何类型的数据的。只是针对某些列,如果给建议类型的话,数据库将按所建议的类型存储。这个被优先使用的数据类型则被称为"亲和类型"。 

方法                 

execute()  执行一条sql语句

executemany() 执行多条sql语句

close() 游标关闭

fetchone() 从结果中取出一条记录

fetchmany() 从结果中取出多条记录

fetchall() 从结果中取出所有记录

综合案例

- **新增**

```python
# 方式一:
# 注意:虽然数据表中的数据列类型已经定义了,但是还是可以插入其他类型的数据值,与值有关
cursor.execute("insert into t_student values(2,3,4,5)")
# 方式二:
# 注意:请使用元组方式传递参数值
cursor.execute("insert into t_student(sname,sex,birthday) values(?,?,?)", ('张三', '女', datetime.datetime.now()))
# 方式三:批量新增
sql_text = """insert into t_student(sname,sex,birthday) values(?,?,?)"""
cursor.executemany(sql_text, [
    ('小明1', '男', datetime.datetime.now()),
    ('小明2', '男', datetime.datetime.now()),
    ('小明3', '男', datetime.datetime.now())
])
```

- **修改**

```python
cursor.execute("update t_student set sname=?,sex=?,birthday=? where sid=?",('王五','男',datetime.datetime.now(),2))
```

- **删除**

```
cursor.execute("delete from t_student where sid=?",(1,))
```

> 注意:在删除时的传递单个参数需要以元组方式,也就是(1,)

- **查询**

```python
# 从查询结果中取出单条记录
cursor.execute("select * from t_student where sid=?",(3,))
print(cursor.fetchone())
# 从查询结果中取出多条记录
cursor.execute("select * from t_student")
print(cursor.fetchmany(3))
# 从查询结果中取出所有记录
cursor.execute("select * from t_student")
print(cursor.fetchall())
# 分页查询
# 方式一:
cursor.execute("select * from t_student limit ?,?",(0,2))
print(cursor.fetchall())
# 方式二:基于切片方式,内存分页(不推荐)
cursor.execute("select * from t_student")
print(cursor.fetchall()[0:2])
```

**最后,请关闭游标和连接对象:**

```python
# 关闭游标
cursor.close()
# 提交事务
connect.commit()
# 关闭连接
connect.close()

MySQL

使用 `pymysql` 模块,使用前需要先进行安装。`PyMySQL` 是在`Python3.x`版本中用于连接 `MySQL` 服务器的一个库,`Python2`中则使用 `mysqldb` 。

基于`PyCharm`配置安装`PyMySQL`模块,首先点击文件 -> 设置,找到项目:`python08`(**注意:`python08`只是示例项目名,请以自己创建的项目名为准**) -> Python 解析器,最后点击+按钮,输入`PyMySQL`的安装包,选择指定版本,点击`安装包(I)`按钮。

![](images\20230419112211.png)

配置数据库连接:
from pymysql import connect
# 创建connection连接对象
connection = connect(user="root", password="1234",
                     host="localhost", port=3306,
                     database="vue", charset="utf8",
                     autocommit=True)

**基本使用:**


# 创建游标对象
cursor = connection.cursor()
cursor.execute("select * from t_region_vue")
print(cursor.fetchone())
print(cursor.fetchall())
print(cursor.fetchmany(5))
# 关闭游标
cursor.close()
# 关闭连接
connection.close()
```

**模糊查询:**
# 创建游标对象
cursor = connection.cursor()
cursor.execute("select * from t_region_vue where region_name like %s",('%城%',))
print(cursor.fetchall())
# 关闭游标
cursor.close()
# 关闭连接
connection.close()

**删除操作:**
sql_text = """DELETE FROM lay_employee WHERE dept_no =?"""
try:
    cursor.execute(sql_text)
    connection.commit()
except ProgrammingError as e:
    print('sql执行失败了')
    connection.rollback()
finally:
    cursor.close()
    connection.close()
 

  • 34
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值