python使用数据库

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

使用python-DB-API,只需要搞清楚Connection、Cursor对象,打开后一定得关闭。


Cursor对象执行insert、update、delete,结果由rowcount返回影响的行数,拿到执行结果。


Cursor对象执行select,通过featchall()拿到list的结果集,每个元素都是一个tuple,对应一行记录


SQL带有参数,需要把参数按照位置传递给execute()方法。


安装mysql官方提供的python驱动

pip install mysql-connection-python --allow-external mysql-connection-python


操作mysql的步骤:

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'])

cursor.rowcount


conn.commit()

cursor.close()


cursor = conn.cursor()

cursor.execute('select * from user where id = %s', ['1'])

values = cursor.fetchall()

values


cursor.close()

conn.close()


ORM技术 -- Object-Relational Mapping,把关系数据库的表接受映射到对象上。

ORM框架 -- SQLAlchemy 

SQLAlchemy的应用, 初始化DBSession

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from  sqlalchemy  import  Column, String, create_engine
from  sqlalchemy.orm  import  sessionmaker
from  sqlalchemy.ext.declarative  import  declarative_base
 
Base  =  declarative_base()
 
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  =  sessionmaker(bind = engine)

一个表对应一个class。使用ORM添加记录,可以看成为添加一个User对象。

1
2
3
4
5
6
session  =  DBSession()
new_user = User( id = '5' , name = 'bob' )
 
session.add(new_user)
session.commit()
session.close()

添加数据的关键是获取session,然后把对象添加到session,最后提交并关闭。DBSession对象可视为当前数据库连接。

使用ORM从数据库中查询数据:结果是一个user对象,而不是tuple。

1
2
3
4
5
6
7
session  =  DBSession()
 
user  =  session.query(User). filter (User. id = = '5' ).one()
 
print ( 'type:' type (user)
print ( 'name:' , user.name)
session.close()

多个表通过外键实现一对多,多对多的关联。ORM框架也可以实现一对多,多对多功能。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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 ))
     
     user_id  =  Column(String( 20 ), ForeignKey( 'user,id' ))

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


ORM的作用就是把数据库表的一行记录与一个对象做相互转换, 使用ORM的前提是了解关系数据库的原理。













本文转自ting2junshui51CTO博客,原文链接: http://blog.51cto.com/ting2junshui/1753482,如需转载请自行联系原作者



相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
21天前
|
缓存 NoSQL 关系型数据库
在Python Web开发过程中:数据库与缓存,MySQL和NoSQL数据库的主要差异是什么?
MySQL是关系型DB,依赖预定义的表格结构,适合结构化数据和复杂查询,但扩展性有限。NoSQL提供灵活的非结构化数据存储(如JSON),无统一查询语言,但能横向扩展,适用于大规模、高并发场景。选择取决于应用需求和扩展策略。
112 1
|
30天前
|
XML 关系型数据库 MySQL
python将word(doc或docx)的内容导入mysql数据库
用python先把doc文件转换成docx文件(这一步也可以不要后续会说明),然后读取docx的文件并另存为htm格式的文件(上一步可以直接把doc文件另存为htm),python根据bs4获取p标签里的内容,如果段落中有图片则保存图片。(图片在word文档中的位置可以很好的还原到生成的数据库内容) 我见网上有把docx压缩后解压获取图片的,然后根据在根据xml来读取图片的位置,我觉得比较繁琐。用docx模块读取段落的时候还需要是不是判断段落中有分页等,然而转成htm之后就不用判断那么多直接判断段落里的样式或者图片等就可以了。
21 1
|
1月前
|
SQL 关系型数据库 MySQL
Python怎么操作Mysql数据库
Python怎么操作Mysql数据库
49 0
|
1月前
|
SQL 关系型数据库 MySQL
python如何操作mysql数据库
python如何操作mysql数据库
24 0
|
1月前
|
存储 数据库 Python
用Python代码表示数据库
用Python代码表示数据库
14 0
|
1月前
|
SQL 关系型数据库 数据库
Python数据库
Python数据库
25 1
|
6天前
|
SQL 关系型数据库 数据库
Python中SQLite数据库操作详解:利用sqlite3模块
【4月更文挑战第13天】在Python编程中,SQLite数据库是一个轻量级的关系型数据库管理系统,它包含在一个单一的文件内,不需要一个单独的服务器进程或操作系统级别的配置。由于其简单易用和高效性,SQLite经常作为应用程序的本地数据库解决方案。Python的内置sqlite3模块提供了与SQLite数据库交互的接口,使得在Python中操作SQLite数据库变得非常容易。
|
11天前
|
关系型数据库 MySQL 数据库连接
Python+SQLite数据库实现服务端高并发写入
Python中使用SQLite内存模式实现高并发写入:创建内存数据库连接,建立表格,通过多线程并发写入数据。虽然能避免数据竞争,但由于SQLite内存模式采用锁机制,可能在高并发时引发性能瓶颈。若需更高性能,可选择MySQL或PostgreSQL。
16 0
|
29天前
|
SQL Java 关系型数据库
在Python中编写Java数据库驱动是不可能的
在Python中编写Java数据库驱动是不可能的
|
1月前
|
SQL 关系型数据库 数据库连接
描述一下在 Python 中使用数据库的常见方法。
【2月更文挑战第26天】【2月更文挑战第91篇】描述一下在 Python 中使用数据库的常见方法。