一、使用sqlite
使用Cursor对象执行insert,update,delete语句时,执行结果由rowcount返回影响的行数,就可以拿到执行结果。
import os, sqlite3db_file = os.path.join(os.path.dirname(__file__), 'test.db')if os.path.isfile(db_file): os.remove(db_file)# 连接到sqlite数据库,文件是file.db,文件不存在时会在当前目录创建:conn = sqlite3.connect(db_file)#打开游标cursor,通过cursor执行SQL语句获得执行结果cursor = conn.cursor()#执行一条SQL语句,创建user表cursor.execute('create table user(ID varchar(20) primary key, name varchar(20), score int)')#继续执行SQL语句,插入记录cursor.execute(r"insert into user values ('A-001', 'Adam', 95)")cursor.execute(r"insert into user values ('A-002', 'bart', 62)")cursor.execute(r"insert into user values ('A-003', 'lisa', 78)")#关闭cursorcursor.close()#提交事务:conn.commit()#关闭connection:conn.close()def get_score_in(low, high): ' 返回指定分数区间的名字,按分数从低到高排序 ' conn1 = sqlite3.connect(db_file) cursor = conn1.cursor() #执行查询语句(sql对象执行select语句时,通过fetchall()可以拿到结果集 #如果SQL语句带有参数,那么需要把参数按照位置传递给execute()方法,有几个?占位符就必须对应几个参数 cursor.execute("select name from user where score >= ? and score <= ? order by score asc;", (low, high,)) #获得查询结果集 values = cursor.fetchall() result = [] for v in values: result.append(v[0]) # values返回的是一个列表,每一个元素都是一个tuple,对应一行记录。需要转换成List,元素是个字符窜型 cursor.close() conn1.close() #搞清connection和cursor对象,打开后正确关闭,否则资源就会泄露 return result# 测试:assert get_score_in(80, 95) == ['Adam'], get_score_in(80, 95)assert get_score_in(60, 80) == ['bart', 'lisa'], get_score_in(60, 80)assert get_score_in(60, 100) == ['bart', 'lisa', 'Adam'], get_score_in(60, 100)print('Pass')
要确保出错的情况下也能关闭掉Connection对象和Cursor对象,需要使用try:…except:…finally:…
二、连接到sql
# 导入MysqL驱动:>>> import MysqL.connector# 注意把password设为你的root口令:>>> conn = MysqL.connector.connect(user='root', password='2333', database='test')>>> cursor = conn.cursor()# 创建user表:>>> cursor.execute('create table user (ID varchar(20) primary key, name varchar(20))')# 插入一行记录,注意MysqL的占位符是%s:>>> cursor.execute('insert into user (ID, name) values (%s, %s)', ['1', 'Michael'])>>> cursor.rowcount1# 提交事务:执行INSERT等 *** 作后要调用commit()提交事务>>> conn.commit()>>> cursor.close()# 运行查询:>>> cursor = conn.cursor()>>> cursor.execute('select * from user where ID = %s', ('1',))>>> values = cursor.fetchall()>>> values[('1', 'Michael')]# 关闭Cursor和Connection:>>> cursor.close()True>>> conn.close()
三、使用sqlAlchemy(还有一对多)
ORM框架的作用就是把数据库表的一行记录与一个对象互相做自动转换。
# 导入:from sqlalchemy import Column, String, create_engine, ForeignKeyfrom sqlalchemy.orm import sessionmaker, relationshipfrom 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:2333@localhost:3306/test')# 创建DBSession类型:DBSession = sessionmaker(bind=engine)# 向数据库表添加一行记录,视为添加一个User对象:# 创建session对象:session = DBSession()# 创建新User对象:new_user = User(ID='5', name='Bob')# 添加到session:session.add(new_user)# 提交即保存到数据库:session.commit()# 关闭session:session.close()# DBSession对象可视为当前数据库连接# 创建Session:session = DBSession()# 创建query查询,filter是where条件,最后调用one()返回唯一行,如果调用all()则返回所有行:user = session.query(User).filter(User.ID=='5').all()# 打印类型和对象的name属性:print('type:', type(user))print('name:', user.name)# 关闭Session:session.close()
【本博客中Python基础笔记均是在廖雪峰的官方网站学习过程中记录的,仅作参考】
总结以上是内存溢出为你收集整理的Python:访问数据库全部内容,希望文章能够帮你解决Python:访问数据库所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)