Python如何实现与数据库的交互操作?

2026-06-11 10:182阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1659个文字,预计阅读时间需要7分钟。

Python如何实现与数据库的交互操作?

4.1 Python与数据库的交互:在没有DB-API之前,不同数据库之间的应用接口非常混乱。各种数据库间接口不同,若项目需要更换数据库,基本需要修改所有与数据库相关的代码,十分不便。

4.1Python与数据库的交互

在没有DB-API之前,各数据库之间的应用接口非常混乱,实现各不相同,如果项目需要更换数据库,基本上需要把所有和数据库相关的代码都进行改动,十分不方便

4.2DB-API

DB-API的出现就是为了解决这个问题,python 所有的数据库接口在一定程度上都要遵守python DB-API规范,它定义了一系列的操作数据库的方式,为各种数据库提供了一致的访问接口,项目中更换使用数据库变得更加方便。

4.3MySQL

开始
创建connection
获取cursor
?
执行查询执行命令获取数据处理数据
?
关闭cursor
关闭connection
结束

###################

conn = pymysql.connect(
?
‘user‘: ‘账号‘,
‘password‘: ‘密码‘,
‘db‘: ‘数据库名‘,
‘charset‘: ‘utf8‘, #不是utf-8
)

#####################

db_config = {
‘user‘: ‘账号‘,
‘password‘: ‘密码‘,
‘db‘: ‘数据库名‘,
‘charset‘: ‘utf8‘,
}
conn = pymysql.connect(**db_config)

1.使用步骤

  • 1.导入模块:

    import pymysql

  • 2.建立连接:

    pymysql.connect(**dbconfig) 连接是不能操作数据库的,需要用连接生成游标来操作

  • 3.创建游标:

    connection.cursor()

  • 4.执行SQL语句:

    cursor.execute(sql) SQL语句都是通过这个方法执行

  • 5.获取结果:

    cur.fetchall()

  • 6.注意:

    在pymysql中执行的SQL语句不需要加 ;

    execute执行完后不是直接得到结果,需要你主动去获取

    和文件一样,别忘了关闭游标与连接

    Python如何实现与数据库的交互操作?

    事务的回滚和提交 rollbck 与commit

2.获取

print( cur .fetchone( )) #一行
print( cur .fetchall( )) #全部 返回二维元组
print( cur .fetchmany(3)) # 几条

3.with 语法 (默认将数据保存到库中)

with conn.cursor() as cur:
cur .execute( ‘select * from student‘)
print( cur .fetchone( )) #一行
?
conn.close()
?
########
?
with pymysql.connect(**mysql_ config) as cur:
cur .execute( ‘select * from student‘)
print( cur .fetchone( )) #一行
cur 此时为游标对象

4. 插入

with pymysql.connect(**mysql_ config) as cur:
cur .execute(
‘insert into student values (6,"患者",16,22)‘
)

5. 事务 (pymysql 默认使用事务模式)

begin ; 开始事务
rollback ; 回滚 (撤回)
commit ; 保存

开始之后 只有commit 才能保存的数据库中

rollback 是在提交之前可以回滚 commit 之前 写的都是在临时环境下

?
conn = pymysql. connect(**mysql_ config)

cur = conn.cursor( )

cur .execute(
‘insert into student values (6,"患者",16,22)‘
)

conn.commit()
cur.close( )
conn.close()

优化: 插入多条数据:

?
conn = pymysql. connect(**mysql_ config)

with conn.cursor() as cur:
cur .execute(
‘insert into student values (6,"患者",16,22)‘
)
conn.commit()
?
?
with conn.cursor() as cur:
cur .execute(
‘insert into student values (7,"7者",17,27)‘
)
conn.commit()
conn.close()

6.fetchone fetchall

数据过多时会一条一条显示 不会爆内存 如果直接 print(cur .fetchall()) 内存爆了

conn = pymysql. connect(**mysql_ config)
?
with conn.cursor() as cur:
cur .execute( ‘select * from student‘)
?
row = cur .fetchone()

while row:
print (‘Row‘:row)
row = cur .fetchone()

#################

?

db_config = {
‘user‘: ‘账号‘,
‘password‘: ‘密码‘,
‘db‘: ‘数据库名‘,
‘charset‘: ‘utf8‘,
}
?
conn = pymysql. connect(**db_config)

cur = conn.cursor( )

cur .execute( ‘select * from student‘)
?
print( cur .fetchone( )) #一行
print( cur .fetchall( )) #全部 返回二维元组
print( cur .fetchmany(3)) # 几条
?
cur.close( )
conn.close()
?
?
#with conn.cursor() as cur:
#cur .execute( ‘select * from student‘)
#print( cur .fetchone( )) #一行
?
#conn.close()
?
?
#with pymysql.connect(**mysql_ config) as cur:
#cur .execute( ‘select * from student‘)
#print( cur .fetchone( )) #一行
#cur 此时为游标对象

##########################
?
?
conn = pymysql. connect(**db_config) #连接pymysql


cur = conn.cursor( ) #建立游标,利用游标来执行sq_语句

try:
#执行sq1语句,不会返回结果,返回共影响的行数
executes = cur .execute( ‘select * from student‘)

#获取结果
values = cur. fetchall()

for value in values : #循环打印结果
print (value)

#提交到数据片,自正把数据插入或者更新到数据白
conn. commit ()

exvept Exceplion as e:

print (e)

#发生了异常,同滚
conn. rollback ()
finally:

#在最后使用完关闭游标和连接#关闭游林

cur. close()
conn. close()
?

4.4. Redis

在python中操作redis的命令和命令行的用户几乎一模一样

  • 1.安装python包redis:

    pip install redis

  • 2.连接redis:

    redis.Redis() 为了兼容旧版本(不推荐使用)

  • 3.连接redis:

    Redis.StrictRedis()

  • 4.在程序操作的数据为bytes类型,加入decode_responses=True,写入的数据为str类型

import redis
?
conn = redis. StrictRedis( db=5)
conn.set( ‘ name‘, ‘短视的‘) #以二进制格式插入
res=conn.get( ‘name‘)
print(res) # 二进制
?
print(res.decode(‘utf-8‘))
?
################
?
conn = redis. StrictRedis( db=5,decode_responses=True)
res=conn.get( ‘name‘)
print(res)
?
#连接远程数据库
conn = redis. StrictRedis(host =‘‘,port=‘‘,db=5)

?

import redis

class RedisList(object):
def __init__(self,db=0,decode_responses=False):
self.conn=redis.StrictRedis(db=db,decode_responses=decode_responses)

def push(self,key,*value,dire=‘r‘):
if dire==‘r‘:
self.conn.lpush(key,*value)
else:
self.conn.rpush(key,*value)

def get(self,key,start_index,end_index=None):
if end_index:
return self.conn.lrange(key,start_index,end_index)
else:
return self.conn.lindex(key,start_index)

def set(self,key,index,value):
self.conn.lset(key,index,value)

def pop(self,key,value,dire=‘r‘):
if dire==‘r‘:
self.conn.lpop(key,value)
else:
self.conn.rpop(key,value)

if __name__==‘__main__‘:
rlist=RedisList(db=1,decode_responses=True)
print(rlist.get(‘name‘,0,3))
?
?
?
?
?

标签:交互41

本文共计1659个文字,预计阅读时间需要7分钟。

Python如何实现与数据库的交互操作?

4.1 Python与数据库的交互:在没有DB-API之前,不同数据库之间的应用接口非常混乱。各种数据库间接口不同,若项目需要更换数据库,基本需要修改所有与数据库相关的代码,十分不便。

4.1Python与数据库的交互

在没有DB-API之前,各数据库之间的应用接口非常混乱,实现各不相同,如果项目需要更换数据库,基本上需要把所有和数据库相关的代码都进行改动,十分不方便

4.2DB-API

DB-API的出现就是为了解决这个问题,python 所有的数据库接口在一定程度上都要遵守python DB-API规范,它定义了一系列的操作数据库的方式,为各种数据库提供了一致的访问接口,项目中更换使用数据库变得更加方便。

4.3MySQL

开始
创建connection
获取cursor
?
执行查询执行命令获取数据处理数据
?
关闭cursor
关闭connection
结束

###################

conn = pymysql.connect(
?
‘user‘: ‘账号‘,
‘password‘: ‘密码‘,
‘db‘: ‘数据库名‘,
‘charset‘: ‘utf8‘, #不是utf-8
)

#####################

db_config = {
‘user‘: ‘账号‘,
‘password‘: ‘密码‘,
‘db‘: ‘数据库名‘,
‘charset‘: ‘utf8‘,
}
conn = pymysql.connect(**db_config)

1.使用步骤

  • 1.导入模块:

    import pymysql

  • 2.建立连接:

    pymysql.connect(**dbconfig) 连接是不能操作数据库的,需要用连接生成游标来操作

  • 3.创建游标:

    connection.cursor()

  • 4.执行SQL语句:

    cursor.execute(sql) SQL语句都是通过这个方法执行

  • 5.获取结果:

    cur.fetchall()

  • 6.注意:

    在pymysql中执行的SQL语句不需要加 ;

    execute执行完后不是直接得到结果,需要你主动去获取

    和文件一样,别忘了关闭游标与连接

    Python如何实现与数据库的交互操作?

    事务的回滚和提交 rollbck 与commit

2.获取

print( cur .fetchone( )) #一行
print( cur .fetchall( )) #全部 返回二维元组
print( cur .fetchmany(3)) # 几条

3.with 语法 (默认将数据保存到库中)

with conn.cursor() as cur:
cur .execute( ‘select * from student‘)
print( cur .fetchone( )) #一行
?
conn.close()
?
########
?
with pymysql.connect(**mysql_ config) as cur:
cur .execute( ‘select * from student‘)
print( cur .fetchone( )) #一行
cur 此时为游标对象

4. 插入

with pymysql.connect(**mysql_ config) as cur:
cur .execute(
‘insert into student values (6,"患者",16,22)‘
)

5. 事务 (pymysql 默认使用事务模式)

begin ; 开始事务
rollback ; 回滚 (撤回)
commit ; 保存

开始之后 只有commit 才能保存的数据库中

rollback 是在提交之前可以回滚 commit 之前 写的都是在临时环境下

?
conn = pymysql. connect(**mysql_ config)

cur = conn.cursor( )

cur .execute(
‘insert into student values (6,"患者",16,22)‘
)

conn.commit()
cur.close( )
conn.close()

优化: 插入多条数据:

?
conn = pymysql. connect(**mysql_ config)

with conn.cursor() as cur:
cur .execute(
‘insert into student values (6,"患者",16,22)‘
)
conn.commit()
?
?
with conn.cursor() as cur:
cur .execute(
‘insert into student values (7,"7者",17,27)‘
)
conn.commit()
conn.close()

6.fetchone fetchall

数据过多时会一条一条显示 不会爆内存 如果直接 print(cur .fetchall()) 内存爆了

conn = pymysql. connect(**mysql_ config)
?
with conn.cursor() as cur:
cur .execute( ‘select * from student‘)
?
row = cur .fetchone()

while row:
print (‘Row‘:row)
row = cur .fetchone()

#################

?

db_config = {
‘user‘: ‘账号‘,
‘password‘: ‘密码‘,
‘db‘: ‘数据库名‘,
‘charset‘: ‘utf8‘,
}
?
conn = pymysql. connect(**db_config)

cur = conn.cursor( )

cur .execute( ‘select * from student‘)
?
print( cur .fetchone( )) #一行
print( cur .fetchall( )) #全部 返回二维元组
print( cur .fetchmany(3)) # 几条
?
cur.close( )
conn.close()
?
?
#with conn.cursor() as cur:
#cur .execute( ‘select * from student‘)
#print( cur .fetchone( )) #一行
?
#conn.close()
?
?
#with pymysql.connect(**mysql_ config) as cur:
#cur .execute( ‘select * from student‘)
#print( cur .fetchone( )) #一行
#cur 此时为游标对象

##########################
?
?
conn = pymysql. connect(**db_config) #连接pymysql


cur = conn.cursor( ) #建立游标,利用游标来执行sq_语句

try:
#执行sq1语句,不会返回结果,返回共影响的行数
executes = cur .execute( ‘select * from student‘)

#获取结果
values = cur. fetchall()

for value in values : #循环打印结果
print (value)

#提交到数据片,自正把数据插入或者更新到数据白
conn. commit ()

exvept Exceplion as e:

print (e)

#发生了异常,同滚
conn. rollback ()
finally:

#在最后使用完关闭游标和连接#关闭游林

cur. close()
conn. close()
?

4.4. Redis

在python中操作redis的命令和命令行的用户几乎一模一样

  • 1.安装python包redis:

    pip install redis

  • 2.连接redis:

    redis.Redis() 为了兼容旧版本(不推荐使用)

  • 3.连接redis:

    Redis.StrictRedis()

  • 4.在程序操作的数据为bytes类型,加入decode_responses=True,写入的数据为str类型

import redis
?
conn = redis. StrictRedis( db=5)
conn.set( ‘ name‘, ‘短视的‘) #以二进制格式插入
res=conn.get( ‘name‘)
print(res) # 二进制
?
print(res.decode(‘utf-8‘))
?
################
?
conn = redis. StrictRedis( db=5,decode_responses=True)
res=conn.get( ‘name‘)
print(res)
?
#连接远程数据库
conn = redis. StrictRedis(host =‘‘,port=‘‘,db=5)

?

import redis

class RedisList(object):
def __init__(self,db=0,decode_responses=False):
self.conn=redis.StrictRedis(db=db,decode_responses=decode_responses)

def push(self,key,*value,dire=‘r‘):
if dire==‘r‘:
self.conn.lpush(key,*value)
else:
self.conn.rpush(key,*value)

def get(self,key,start_index,end_index=None):
if end_index:
return self.conn.lrange(key,start_index,end_index)
else:
return self.conn.lindex(key,start_index)

def set(self,key,index,value):
self.conn.lset(key,index,value)

def pop(self,key,value,dire=‘r‘):
if dire==‘r‘:
self.conn.lpop(key,value)
else:
self.conn.rpop(key,value)

if __name__==‘__main__‘:
rlist=RedisList(db=1,decode_responses=True)
print(rlist.get(‘name‘,0,3))
?
?
?
?
?

标签:交互41