第19单元 使用 MySQL 数据库:pymysql
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文档来存储它们。接下来,我们就来介绍相关的内容。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论