专栏首页技术向python高阶教程-使用数据库(mysql, sqlite, sqlalchemy)

python高阶教程-使用数据库(mysql, sqlite, sqlalchemy)

本文由腾讯云+社区自动同步,原文地址 http://blogtest.stackoverflow.club/119/

本篇内容来自原创小册子《python高阶教程》,点击查看目录

背景

不管是写爬虫,还是做普通的数据处理,使用数据库都会使代码更加复杂,但也好处多多。一个明显的优势就是我们的程序拥有了断点继续运行的功能。即使在运行中出了错误,或者主机意外关机,我们的已经处理过的数据都不会被破坏。

在python中使用数据库也非常简便,我经常接触的数据库是mysql和sqlite.

用直接方式使用mysql

  • 安装pymysql
pip3 install pymysql
  • 连接数据库示例
import pymysql
# 打开数据库连接
db = pymysql.connect("localhost","testuser","test123","TESTDB" )
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
 
# 使用 execute()  方法执行 SQL 查询 
cursor.execute("SELECT VERSION()")
 
# 使用 fetchone() 方法获取单条数据.
data = cursor.fetchone()
# 获取所有记录列表
# results = cursor.fetchall()
# 确认修改
# db.commit()
# 回退
# db.rollback()
 
print ("Database version : %s " % data)
db.close()
  • 总结
  • 先连接数据库,创建cursor,再执行命令,确认更改或者回退,最后关闭连接。
  • 具体的数据库操作是通过sql语句执行的,仍然需要对mysql语句有较多的了解。

用直接方式使用sqlite

  • sqlite3是python3的内置模块,无需安装
  • 连接数据库示例
import sqlite3
conn = sqlite3.connect('test.db')
print "Opened database successfully";
c = conn.cursor()
c.execute('''CREATE TABLE COMPANY
       (ID INT PRIMARY KEY     NOT NULL,
       NAME           TEXT    NOT NULL,
       AGE            INT     NOT NULL,
       ADDRESS        CHAR(50),
       SALARY         REAL);''')
print("Table created successfully")
conn.commit()
conn.close()
  • 总结
  • sqlite3和mysql的操作逻辑相似
  • 依然要对sqlite3的语法有所了解

用sqlalchemy做对象映射

sqlalchemy是一个对象映射的库,自动帮我们完成从数据库数据类型到python数据类型对的映射,

从而摆脱对特定sql语言的依赖,使我们专注于业务逻辑的实现。

  • 安装sqlalchemy
pip3 install sqlalchemy
  • 连接数据库
# 导入:
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+pymysql://root:password@localhost:3306/test')
# 创建DBSession类型:
DBSession = sessionmaker(bind=engine)
  • 添加记录
# 创建session对象:
session = DBSession()
# 创建新User对象:
new_user = User(id='5', name='Bob')
# 添加到session:
session.add(new_user)
# 提交即保存到数据库:
session.commit()
# 关闭session:
session.close()
  • 查询记录
# 创建Query查询,filter是where条件,最后调用one()返回唯一行,如果调用all()则返回所有行:
user = session.query(User).filter(User.id=='5').one()

参考:

  1. sql中文文档
  2. sqlite可视化管理工具汇总
  3. sqlite语句
  4. 自强学堂sqlalchemy

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • stylus语法知多少

    本文由腾讯云+社区自动同步,原文地址 https://stackoverflow.club/article/how_to_use_stylus/

    羽翰尘
  • 深度学习应用部署的几种形式

    本文由腾讯云+社区自动同步,原文地址 https://stackoverflow.club/article/several_ways_to_deploy_dee...

    羽翰尘
  • php空间Freehostia设置https证书

    本文由腾讯云+社区自动同步,原文地址 https://stackoverflow.club/article/freehostia_https/

    羽翰尘
  • python操作mysql数据库

    Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口。

    想偷懒的程序员
  • Python快速学习第九天--安装并操作Mysql数据库

    python操作mysql数据库 Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口。...

    汤高
  • MDK5.29,5.30和各种软件包镜像下载(2020-05-09)

    ARM.CMSIS-Driver_Validation.1.4.0.pack (7.94MB)

    armfly
  • 一张脑图讲透商品数据化运营:提高流量和营业额的工具和模型

    沉默的白面书生
  • 【论文推荐】最新6篇图像分割相关论文—隐马尔可夫随机场、级联三维全卷积、信号处理、全卷积网络、多源域适应、循环分割

    【导读】专知内容组整理了最近六篇图像分割(Image Segmentation)相关文章,为大家进行介绍,欢迎查看! 1.Combination of Hidd...

    WZEARW
  • 资源 | Facebook开源DrQA的PyTorch实现:基于维基百科的问答系统

    选自GitHub 机器之心编译 参与:Panda 今年 4 月,斯坦福大学和 Facebook 人工智能研究所在 arXiv 发布了一个基于维基百科的开放域问题...

    机器之心
  • 关于如何从Go 1到Go 2进行不兼容的更改,而尽可能少地进行破坏的建议。

    A proposal for how to make incompatible changes from Go 1 to Go 2 while breaking...

    李海彬

扫码关注云+社区

领取腾讯云代金券