返回介绍

第19单元 使用 MySQL 数据库:pymysql

发布于 2024-01-28 22:01:16 字数 1564 浏览 0 评论 0 收藏 0

Python使用数据库驱动模块与MySQL通信。诸如pymysql等许多数据库驱动都是免费的。本单元将使用pymysql,它是Anaconda的一部分。驱动程序经过激活后与数据库服务器相连,然后将Python的函数调用转换为数据库查询,反过来,将数据库结果转换为Python数据结构。

connect()函数需要以下信息:数据库(名称)、数据库服务器的位置(主机和端口号)和数据库用户(名称和密码)。如果数据库成功连接,则返回连接标识符。接下来,创建与数据库连接相关联的数据库游标:

conn = pymysql.connect(host="localhost", port=3306,
  user="dsuser", passwd="badpassw0rd", db="dsdb")
cur = conn.cursor()

游标的execute()函数向数据服务器提交要执行的查询命令,并返回受影响的行数(如果查询是非破坏性的,则返回零)。查询命令只是一个字符串,其构建方法参考上一单元。与命令行MySQL查询不同,pymysql查询语句不需要在结尾加上分号。

query = '''
SELECT employee.empname,position.description
  FROM employee,position WHERE employee.id=position.eid
  ORDER BY position.description
'''
n_rows = cur.execute(query)

如果提交非破坏性查询(比如SELECT),需要使用游标函数fetchall()获取所有匹配的记录。该函数返回一个生成器,可以将其转换为列字段的元组构成的列表:

   results = list(cur.fetchall())

➾ [('John Smith', 'Accountant'), ('Anon I. Muss', 'Imposter'),('Abe Lincoln', 'President'), ('Jane Doe', 'Programmer')]

如果查询是破坏性的(例如UPDATE、DELETE或INSERT),则必须执行commit操作。(注意,提供commit()函数的是连接本身,而不是游标。)

conn.commit()

如果在一个破坏性查询之后没有执行commit,服务器就不会修改表。

关系数据库自1974年以来沿用至今(Ingres)1。它们在数据规范化方面展开了很多伟大的工作,使得数据可以自然地分解为表、列和行,这可以说是关系数据库带给人们的馈赠。其实,任何数据集都可以被规范化,但是规范化的代价可能非常大(无论是在实现规范化方面,还是在最终查询性能方面)。某些类型的数据是不遵循规范化约定的,比如文本文档、图像、音频和视频剪辑,以及不规则数据结构。对于这些数据,不应强制它们遵循SQL规范,而应选择一个NoSQL文档来存储它们。接下来,我们就来介绍相关的内容。

1uickbase.intuit.com/articles/timeline-of-database-history

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文