前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >python访问数据库

python访问数据库

作者头像
yaohong
发布于 2020-06-19 03:59:26
发布于 2020-06-19 03:59:26
2.1K00
代码可运行
举报
文章被收录于专栏:姚红专栏姚红专栏
运行总次数:0
代码可运行

一:SQLite

1.1.Sqlite数据库简介

  SQLite是一个嵌入式的数据库,他的数据库是个文件。

  SQLite本身是c语音写的,所以经常被集成到各种应用程序。

  python就内置了SQLite,所以python使用SQLite不需要安装任何东西,直接进行使用。

  连接到数据库后需要打开游标,称之为Cursor,通过Cursor执行sql预计和执行后的结果。

1.2使用SQLite数据库

python中内置的与mysql交互的方法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#导入SQLit3
import  sqlite3

#连接sqlite3数据库,数据库文件是test.db,如果文件不存在会自动在当前目录中创建
conn = sqlite3.connect('test.db')

#创建一个Cursor
cursor = conn.cursor()

#创建一个user表
cursor.execute('create table user (id varchar(20) primary key, name varchar(20) )')

#插入一条记录
cursor.execute(inser into user(id , name) values('1',  'yaohong' ))

#获取插入的条数
print cursor.rowcount

#关闭cursor
cursor.close()

#提交事务
cursor.commit()

#关闭conn
conn.close()

查询结果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conn = sqlite3.connect('test.db')

cursor = conn.cursor()

#查询
cursor.executr('select * from user where id=?', ('1',))

#获得查询结果
values = cursor.fetchall()

print values

cursor.close()
conn.close()

查询获取的结果都是一个list,每个元素都是一个tuple。

要确保打开的Connection对象和Cursor对象都正确地被关闭,否则,资源就会泄露。

如何才能确保出错的情况下也关闭掉Connection对象和Cursor对象呢?请回忆try:...except:...finally:...的用法。

二:MySql

2.1.python中连接MySql

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#导入mysql驱动
import  mysql.connector

#连接mysql
conn = mysql.connector.connect(user='root', password='password', database='test', use_unicode=True)

#连接cursor
cursor = conn.cursor()

#创建usr表
cursor.exect('create table user  (id varchar(20) primary key, name varchar(20))')

cursor.execute('insert into user (id, name) values (%s, %s)', ['1', 'Michael'])

#提交事务
cursor.commit()
cursor.close()


#运行查询

cursor = conn.cursor()
cursor.execute('select * from user where id = %s', ('1',))
values = cursor.fetchall()
cursor.close()
conn.close()

三:SQLAlchemy

3.2.ORM

数据库是个二维表,包含对行多列。把一个表用python的数据结构来表示的话,可以用一个list表示多行,list的每行是个tuple。如下用id和name的user表。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[
    ('1', 'Michael'),
    ('2', 'Bob'),
    ('3', 'Adam')
]

  如果用tuple很难看出表的结构,如果把一个tuple用一个class来表示,就可以更容易的看出表结构。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class  User(object):
    def __init__(self, id, name):
        self.id = id
        self.name = name

[
    User('1', 'jack'),
    User('2', 'yaohong')          
]

  以上就是ORM(对象关系)映射

在Python中,最有名的ORM框架是SQLAlchemy。

3.1.使用SQLAlchemy

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 导入:
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)

  如果有多个表,则再定义一个class

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class School(Base):
    __tablename__ = 'school'
    id = ...
    name = ...

  添加数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 创建session对象:
session = DBSession()

# 创建User对象
new_user = User(id='5', name='Bob')

#添加到session
session.add(new_user)

#提交即保存到数据库:
session.commit()

# 关闭session:
session.close()

  查询数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#session
session = DBSession()

#创建Query查询,filter是where条件,最后调用one()返回唯一行,如果调用all()则返回所有行:
user = session.query(User).filter(User.id=='5').one()

#关闭session
session.close()

  一对多关系

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class User(Base):
    __tablename__ = 'user'

    id = Column(String(20), primary_key=True)
    name = Column(String(20))
    # 一对多:
    books = relationship('Book')

class Book(Base):
    __tablename__ = 'book'

    id = Column(String(20), primary_key=True)
    name = Column(String(20))
    # “多”的一方的book表是通过外键关联到user表的:
    user_id = Column(String(20), ForeignKey('user.id'))

  当我们查询一个User对象时,该对象的books属性将返回一个包含若干个Book对象的list。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-10-26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
python_day11のPython操
pymysql是Python中操作MySQL的模块,其使用方法和python2.7的MySQLdb几乎相同。
py3study
2020/01/13
4850
python使用数据库
使用python-DB-API,只需要搞清楚Connection、Cursor对象,打开后一定得关闭。
py3study
2020/01/14
7070
Python数据库操作之pymysql模块和sqlalchemy模块
参考博客https://www.cnblogs.com/aylin/p/5770888.html
林清猫耳
2018/10/09
9570
Python数据库操作之pymysql模块和sqlalchemy模块
Python连接数据库的N种方法
在现代软件开发中,连接数据库是至关重要的一部分。Python作为一种广泛使用的编程语言,提供了多种连接数据库的方法。本文将介绍使用Python连接数据库的多种方法,包括标准库、第三方库以及ORM框架。
繁依Fanyi
2024/03/13
1.5K0
Python 进阶(四):数据库操作之 MySQL
MySQL 是目前使用最广泛的数据库之一,它有着良好的性能,能够跨平台,支持分布式,能够承受高并发。如果还没有安装 MySQL,下载地址:https://dev.mysql.com/downloads/mysql/5.7.html,安装参考:https://jingyan.baidu.com/article/fc07f989b298ca12ffe519b6.html。
Python小二
2020/08/18
1.1K0
Python和MySQL数据库简单操作
The Python SQL Toolkit and Object Relational Mapper。 ORM(O是面向对象,R是面向关系,M是Map): 面向对象和面向关系的模拟关联。
星哥玩云
2022/08/17
7630
Python自动化开发学习12-Mari
RDBMS(Relational Database Management System)即关系数据库管理系统,在开始之前,先了解下RDBMS的一些术语:
py3study
2020/01/08
2.8K0
Python学习之旅(三十八)
MySQL是Web世界中使用最广泛的数据库服务器。SQLite的特点是轻量级、可嵌入,但不能承受高并发访问,适合桌面和移动应用。而MySQL是为服务器端设计的数据库,能承受高并发访问,同时占用的内存也远远大于SQLite。
py3study
2020/02/10
6440
Python 数据库骚操作 -- MySQL
今天这篇是三大数据库的结尾篇,前面两篇分别是:《Python 数据库骚操作 -- MongoDB》《Python 数据库骚操作 -- Redis》,这篇主要介绍 MySQL 的 orm 库 SQLAlchemy 。那什么是 orm 呢?Object Relational Mapper,描述程序中对象和数据库中数据记录之间的映射关系的统称。介绍完了,那就走起呗!
1480
2019/08/05
5360
Python 数据库骚操作 -- MySQL
Python操作MySQL数据库02----sqlalchamy
在上一节中,我们是用pymysql库来操作MySQL,这是比较传统的方式。实际开发环境中,常常使用ORM来操作数据库。本小节中,我们介绍Python中的ORM-------sqlalchemy.
软件架构师Michael
2022/03/07
4390
Day24访问数据库
使用SQLite SQLite是一种嵌入式数据库,它的数据库就是一个文件。由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中,甚至在iOS和Android的App中都可以集成。 Python就内置了SQLite3,所以,在Python中使用SQLite,不需要安装任何东西,直接使用。 在使用SQLite前,我们先要搞清楚几个概念: 表是数据库中存放关系数据的集合,一个数据库里面通常都包含多个表,比如学生的表,班级的表,学校的表,等等。表和表之间通过外键关联。 要操作关系数据库,首先
林清猫耳
2018/04/26
1.8K0
pymysql
pymsql是python中操作的MYsql的模块,其使用方法和MySQLdb几乎相同
Wyc
2018/09/11
4.2K0
pymysql
Python 之 sqlalchemy删
表结构: 代码: #Author Kang import sqlalchemy from sqlalchemy import create_engine from sqlalchemy.ext.de
py3study
2020/01/10
4670
Python数据库编程:从基础到高级的全面指南
在当今数字时代,数据是任何应用程序的核心。Python提供了丰富的数据库编程工具和库,使得与各种数据库进行交互变得更加容易。本文将深入探讨Python数据库编程的各个方面,从基础概念到高级技术,为读者提供全方位的指南。
海拥
2023/12/08
7190
SQLALchemy的其他常用操作
使用连接池的两种方式 第一种方式: 直接从SessionFactory里获取,此时如果需要开启多个进程,那么创建连接池的代码一定要放在循环里面 不然的话每个进程都是用一个session了 from sqlalchemy.orm import sessionmaker from sqlalchemy import create_engine from models import Student,Course,Student2Course engine = create_engine( "my
人生不如戏
2018/07/05
7980
Python ORM - pymysql&sqlalchemy
Python3主要是面向对象的编码风格,访问数据库也可以使用ORM框架来实现面向对象,本文介绍pymysql和sqlalchemy 安装组件 pip3 install pymysql pip3 install sqlalchemy 定义数据对象 user表结构 CREATE TABLE `user` ( `id` int NOT NULL AUTO_INCREMENT, `name` varchar(64) NOT NULL, `age` int DEFAULT NULL, `del
十毛
2021/01/21
7560
Python 连接 MySQL 的几种方法
尽管很多 NoSQL 数据库近几年大放异彩,但是像 MySQL 这样的关系型数据库依然是互联网的主流数据库之一,每个学 Python 的都有必要学好一门数据库,不管你是做数据分析,还是网络爬虫,Web 开发、亦或是机器学习,你都离不开要和数据库打交道,而 MySQL 又是最流行的一种数据库,这篇文章介绍 Python 操作 MySQL 的几种方式,你可以在实际开发过程中根据实际情况合理选择。
程序员小新
2021/12/27
4.4K0
python高阶教程-使用数据库(mysql, sqlite, sqlalchemy)
本文由腾讯云+社区自动同步,原文地址 http://blogtest.stackoverflow.club/119/
羽翰尘
2019/11/20
2K0
数据持久化技术(Python)的使用
利用 pymysql.connect 建立数据库连接并执行 SQL 命令(需要提前搭建好数据库):
霍格沃兹测试开发Muller老师
2022/06/06
4130
Python 使用SQLAlchemy数据库模块
SQLAlchemy 是用Python编程语言开发的一个开源项目,它提供了SQL工具包和ORM对象关系映射工具,使用MIT许可证发行,SQLAlchemy 提供高效和高性能的数据库访问,实现了完整的企业级持久模型。
王瑞MVP
2023/11/24
5310
相关推荐
python_day11のPython操
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验