Python3 访问数据库

数据

程序运行时数据都被载入内存,运行结束后数据会被保存到磁盘上,无论是保存到本地磁盘还是通过网络保存到服务器上,最终都会讲数据写入磁盘文件。
数据的存储格式是保存数据时会面临的一个大问题。比如我们要保存一个班级里所有学生的成绩单:

namegrade
alice98
bob95
cindy91
lisa94
gabby80

我们可以用文本文档保存,用空格或是,作为分隔符:

alice,98
bob,95
cindy,91
lisa,94
gabby,80

也可以用json格式保存:

[
{“name”:“alice”,“score”:98}
{“name”:“bob”,“score”:95}
{“name”:“cindy”,“score”:91}
{“name”:“lisa”,“score”:94}
{“name”:“gabby”,“score”:80}
]

数据库

为了实现数据的存储和查询,便出现了数据库(database)这种软件。

数据库类别

付费:oracle、SQL server、DB2和Sybase
免费开源:MySQL、postgreSQL、sqlite
MySQL具有免费、普及率高以及具有多种监控运维工具的特点,是Python开发人员的首选。

sqlite

sqlite概述

这是一种嵌入式数据库,它的数据库就是一个文件。具有轻量级、可嵌入的特点,但是不能承受高并发访问,适合桌面和移动应用。
表示数据库存放关系数据的集合,一个数据库里面通常都包含多个表,表与表之间通过外键关联。要对数据库进行操作首先需要使用connect连接数据库,连接完成之后要打开游标cursor,通过游标执行SQL语句获取执行结果。

实现建库、插入和查询

#!/usr/bin/python3
# coding=utf-8
import sqlite3
#连接到数据库,若文件不存在则在当前目录创建
conn = sqlite3.connect('test.db')
# 创建cursor
cursor = conn.cursor()
# 创建一个user表
cursor.execute('create table user (id varchar(20) primary key, name varcha(20))')
# 插入一个记录
cursor.execute('insert into user(id, name) values(\'1\',\'Michael\')')
#  获取插入的行数
print(cursor.rowcount)
# 执行查询语句
cursor.execute('select * from user where id=?',('1',))
values = cursor.fetchall()
print(values)
cursor.close()
conn.commit()
conn.close()

注意事项

  1. 记住connectioncursor对象,打开后记得关闭。
  2. 使用cursor对象执行insertupdatedelete语句时,执行结果由rowcount返回,返回值是作用的行数。
  3. 使用cursor对象执行Select语句时通过fetchall()拿到结果集。返回结果是一个list,每个元素是一个tuple,对应一个记录。
  4. 如果SQL语句带有参数,那么需要把参数按照位置传递给execute()方法,有几个占位符就必须对应几个参数,比如:
    cursor.execute('select * from user where name=? and pwd=', ('abc',' password'))

小结

  • 在Python中操作数据库时,要先导入数据库对应的驱动,然后通过connection对象和cursor对象操作数据。
  • 要确保打开的connectioncursor对象被正确地关闭,否则资源就会泄露。
  • 可以通过try...except....finally的方法确保连接和游标被关闭

mysql

mysql概述

MySQL是web界面使用最广泛的数据库服务器,是为服务器端设计的数据库,能够承受高并发刚问,占用的内存比较大。

实现建库、插入和查询

#!/usr/bin/python3
# coding=utf-8
import mysql.connector
conn = mysql.connector.connect(user='root',password='password',database='test')
cursor = conn.cursor()
cursor.execute('create table user (id varchar(20) primary key, name varchar(20))')
cursor.execute('insert into user (id, name) values (%s, %s)', ['1', 'Michael'])
print(cursor.rowcount)
conn.commit()
cursor.close()

小结

  • 执行INSERT等操作后要调用commit()提交事务;
  • MySQL的SQL占位符是%s。

使用SQLAlchemy

数据库是一个包含多行多列的二维表,把一个表用Python的数据结构表示出来可以用一个list表示多行,list中的每个元素是tuple,包含每条记录的关键字和属性。
object-relational mapping:将关系数据库的表结构映射到对象需要一个转换器,最著名的框架是SQLalchemy。
安装:pip3 install sqlalchemy
使用:前文已经创建了一个user表,此处我们直接使用即可

#!/usr/bin/python3
# coding=utf-8
# 导入:
from sqlalchemy import Column, String, create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base

# 创建对象的基类:
Base = declarative_base()

# 定义User对象:
class User(Base):
    # 表的名字:
    __tablename__ = 'user'

    # 表的结构:
    id = Column(String(20), primary_key=True)
    name = Column(String(20))

# 初始化数据库连接:
engine = create_engine('mysql+mysqlconnector://root:password@localhost:3306/test')
# 创建DBSession类型:
DBSession = sessionmaker(bind=engine)

小结

ORM框架是将数据库表的一行记录与一个对象互相做自动转换。

总结

利用Python进行数据库操作有很多种方法,之后可以进行详细的学习。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值