网站首页 文章专栏 python高阶教程-使用数据库(mysql, sqlite, sqlalchemy)
本篇内容来自原创小册子《python高阶教程》,点击查看目录。
不管是写爬虫,还是做普通的数据处理,使用数据库都会使代码更加复杂,但也好处多多。一个明显的优势就是我们的程序拥有了断点继续运行的功能。即使在运行中出了错误,或者主机意外关机,我们的已经处理过的数据都不会被破坏。
在python中使用数据库也非常简便,我经常接触的数据库是mysql和sqlite.
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,再执行命令,确认更改或者回退,最后关闭连接。
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的操作逻辑相似
sqlalchemy是一个对象映射的库,自动帮我们完成从数据库数据类型到python数据类型对的映射, 从而摆脱对特定sql语言的依赖,使我们专注于业务逻辑的实现。
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()