对于我们需要存储服务的编程来说,数据库是一个可靠的伙伴。数据库提供了非常便利的存储功能,并且可以通过sql语句快捷的增删改查。在python中有多种方法可以操作数据库,例如MySQLdb,pymysql,pypyodbc等,其实操作起来都差不多。
一般操作数据库的流程为:
我们连接后打开数据库,就可以使用sql语句操作数据库,切记不要忘记关闭,否则操作可能无法保存。
在众多库中,这个流程几乎都是不变的,操作数据库的关键还是sql语句的执行。一般需要注意的是一下几点:
- 使用数据库信息 路径 密码等链接数据库 信息和路径一定不要写错
- 查询语句不要写错
pypyodbc安装
使用pycharm的小伙伴可以直接在file-setting中进行添加
点击下面的install安装即可。没有ide的小伙伴可以直接在命令行中使用
pip install pypyodbc
数据库连接和操作
操作步骤为连接打开-获取游标-sql查询-关闭
这里游标需要说一下,游标实际上就像是一个指针,指向内存中存储数据集的地方,可以让用户像操作数组一样操作数据库的数据集。简而言之,游标是用于访问数据库条目信息的。
下面演示如何操作:
测试数据库的内容
# 不同数据库连接方法不一样
# 如果需要其他的请查看其他数据库的连接函数和参数
import pypyodbc
import os
# 操作Access数据库类
# __new__()方法负责创建实例,而__init__()仅仅是负责实例属性相关的初始化而已,执行顺序是,先new后init。
class getdatabase:
# 初始化函数 连接数据库
def __init__(self, db_name, password=""):
if not os.path.exists(db_name):
pypyodbc.win_create_mdb(db_name) # 注意是绝对路径 例如 d:\\test_db.mdb
self.db_name = db_name
self.password = password
self.connectDB() # 调用连接函数
# 连接数数据库函数
def connectDB(self):
str = 'Driver={Microsoft Access Driver (*.mdb,*.accdb)};PWD=' + self.password + ";DBQ=" + self.db_name
# str = 'Driver={Microsoft Access Driver (*.mdb)};DBQ=self.db_name'
try:
self.conn = pypyodbc.win_connect_mdb(str)
return True
except:
print("数据库连接失败!请检查!")
return False
# 得到游标
# 可以将游标(Cursor)形象地看做成一个变动的光标。它实际上是一个指针,它在一段Oracle存放数据查询结果集或数据操作结果
# 集的内存中,这个指针可以指向结果集中的任何一条记录 。这样就可以得到它所指向的数据了,但初始时它指向首记录。这种模型很像编程语言中的数组。
# 可以简单的理解游标为指向结果集记录的指针,利用游标可以把返回它当前指向 的行记录(只能返回一行记录)。如果要返回多行,那么需要不断滚动游标,把想要的数据查询一遍。用户可以操作游标所在位置行的记录。
def getCur(self):
try:
return self.conn.cursor() #打开数据库之后 获取游标
except:
return
# 执行sql查询语句 返回所有的结果
def selectDB(self, cur, sql):
try:
cur.execute(sql)
return cur.fetchall() # 返回查询结果
except:
return []
# 执行插入语句 并更新数据库
def insertDB(self, cur, sql):
try:
cur.execute(sql)
self.conn.commit() # 这个不能少 相当于确认 否则数据不会更新
return True
except:
return False
# 关闭数据库
def close(self):
try:
self.conn.close()
except:
return
# 程序入口
if __name__ == '__main__':
path = os.path.join("F:\SOFTWARE\编程软件\python\projects\AAA", "data.accdb")
# 步骤一 连接数据库
conn = getdatabase(path, "")
# 步骤二 获取游标
cur = conn.getCur() # 游标的使用可以让用户像操作数组一样操作查询出来的数据集
#步骤三 查询语句
sql = u"select * from userData where Port = 1234" # 中文需要前面加u 否则可能出错
data = conn.selectDB(cur, sql) # 使用游标配合查询语句
print(str(data[0]["code"])) # 输出结果中的一条的某个字段
#步骤三 插入语句
# sql = u"INSERT INTO userData(id,port,code,type,msg) VALUES(10,12321,'efes','不知道','dadfd')"
# data = conn.insertDB(cur, sql) # 使用游标配合查询语句
#步骤四 关闭游标和数据库
cur.close()
conn.close()
# 输出结果为
QYRWBBIWFR
打开和操作数据库之后,第二个关键的部分就是得到的返回结果是什么?只有在了解返回数据的结构我们才可以进一步的处理数据,我们来看一下data(查询语句的结果)变量中的数据内容
可以看到达到的data是列表,每一个元素时一行数据,而每个数据是一行,其中游标描述了每个字段的名字,类型等,支持我们使用类似字典的方式访问字段,注意这里的字段名字没有大小写之分
data[0]["code"] #获取第一个行的code字段值 遍历使用len(data)可知返回条目数
# 结果
QYRWBBIWFR
这个库使用的关键是如何跟不同的数据库连接,幸好官网给出了很多的例子
https://www.connectionstrings.com
例如
剩下的大家需要什么就查什么吧,它还提供了很多