Python入门系列(九)——数据库

鉴于是入门系列教程,我们在数据库种类上且不做拓展,仅以MySQL为例。
目录:
一、mysql-connector
二、PyMySQL
三、mysqlclient
四、SQLAlchemy

Python3下MySQL数据库操作有有多种方法:首先是mysql-connectorPyMySQL,区别在于前者是MySQL 官方提供的驱动器,后者是python3中提供的第三方库,这两者的共同点是皆为python开发,所以基于语言的特性效率并不高。使用过python2的小伙伴都知道python2中有一个MySQLdb库,它是对C语言操作MySQL数据库的一个简单封装,因为底层语言的特性其运行效率极高,然而在python3中取消掉了。但mysqlclient作为MySQLdb的分支却对python3保留着良好的兼容性并最终保留了下来,这也是我最终推荐的方式,欲知详情,且看下文~

一、mysql-connector

首先,自行安装mysql-connector:pip3 install mysql-connector

我们来感受下最基本的数据库连接操作,此例子希望大家感受下最基本的数据库连接操作,并对比两种查询结果获取方法,当然,你完全可以通过自定义SQL语法limit来实现:

import mysql.connector

#连接数据库
mydb = mysql.connector.connect(
    host="localhost",            # 数据库主机地址
    user="root",                 # 数据库用户名
    passwd="root",               # 数据库密码
    database="dvwa"              # 指定数据库
)
mycursor = mydb.cursor()         # 使用 cursor() 方法创建一个游标对象
mycursor.execute("SHOW TABLES")
myresult1 = mycursor.fetchall()  # fetchall() 获取所有记录
print('fetchall()结果:{}'.format(myresult1))
mycursor.execute("SHOW TABLES")
myresult2 = mycursor.fetchone()  # fetchone() 获取单条记录
print('fetchone()结果:{}'.format(myresult2))
# 关闭数据库连接
mydb.close()

#输出:
fetchall()结果:[('guestbook',), ('user',), ('users',)]
fetchone()结果:('guestbook',)

然后是数据库基本插入操作,此处希望大家对比学习单句执行和多句执行的方法,并养成良好的代码习惯:

import mysql.connector

#连接数据库
mydb = mysql.connector.connect(
    host="localhost",                   # 数据库主机地址
    user="root",                        # 数据库用户名
    passwd="root",                      # 数据库密码
    database="dvwa"                     # 指定数据库
)
mycursor = mydb.cursor()                # 使用 cursor() 方法创建一个游标对象
sql="INSERT INTO user (user,password) VALUES (%s, %s)"
val=[
    ('rabbit','rabbit'),
    ('carrot','carrot')
]
mycursor.executemany(sql, val)          # executemany()方法执行多条sql语句
mydb.commit()                           # 提交事务,数据表内容有更新,必须使用到该语句
mycursor.execute("select * from user")  # execute()方法执行单条sql语句
print("当前表的内容:")
for i in mycursor:
  print(i)
# 关闭数据库连接
mydb.close()

#输出:
当前表的内容:
('rabbit', 'rabbit')
('carrot', 'carrot')

这里顺便提一句,sql语法中关键词是不区分大小写的,而数据库名表名之类的看情况。SQL Server是通过数据库设置,来决定表名、字段名是否区分大小写;MySQL是依赖于配置和操作系统来决定 ( Windows 不区分, Linux 区分)。

二、PyMySQL

同上,自行安装PyMySQL:pip3 install PyMySQL

import pymysql

#连接数据库
mydb = pymysql.connect(
    host="localhost",                   # 数据库主机地址
    user="root",                        # 数据库用户名
    passwd="root",                      # 数据库密码
    database="dvwa"                     # 指定数据库
)
mycursor = mydb.cursor()                # 使用 cursor() 方法创建一个游标对象
sql="INSERT INTO user (user,password) VALUES (%s, %s)"
val=[
    ('rabbit','rabbit'),
    ('carrot','carrot')
]
mycursor.executemany(sql,val)           # executemany()方法执行多条sql语句
mydb.commit()                           # 提交事务,数据表内容有更新,必须使用到该语句
mycursor.execute("select * from user")  # execute()方法执行单条sql语句
print("当前表的内容:")
for i in mycursor:
  print(i)
# 关闭数据库连接
mydb.close()

#输出:
当前表的内容:
('rabbit', 'rabbit')
('carrot', 'carrot')

有没有感觉很眼熟= =,我纠结了两天,他们两个语法上有什么差异,原谅我百度Google了好久也没找到特别完美的解释,从专业开发那里得到的解释是pymysql在工程较大时很容易引起并发问题,之前遇到过多线程频繁读写数据库出现的问题。至少目前看来未发现明显语法差异,虽然强迫症,但对于一个次选方案我们暂且搁置,欢迎大家积极讨论留言!

三、mysqlclient

同上,自行安装mysqlclientpip3 install mysqlclient

import MySQLdb

#连接数据库
mydb = MySQLdb.connect(
    host="localhost",                   # 数据库主机地址
    user="root",                        # 数据库用户名
    passwd="root",                      # 数据库密码
    database="dvwa"                     # 指定数据库
)
mycursor = mydb.cursor()                # 使用 cursor() 方法创建一个游标对象
sql="INSERT INTO user (user,password) VALUES (%s, %s)"
val=[
    ('rabbit','rabbit'),
    ('carrot','carrot')
]
mycursor.executemany(sql,val)           # executemany()方法执行多条sql语句
mydb.commit()                           # 提交事务,数据表内容有更新,必须使用到该语句
mycursor.execute("select * from user")  # execute()方法执行单条sql语句
print("当前表的内容:")
for i in mycursor:
  print(i)
# 关闭数据库连接
mydb.close()

#输出:
当前表的内容:
('rabbit', 'rabbit')
('carrot', 'carrot')

写道这里,老脸一黑,这让我怎么讲课,语法完全相同好不好!
这里补充两点,在其他教程中你可能还会看到一个MySQL-python的叫法,MySQL-pythonMySQLdb,刚刚我们说到了,它是对C语言操作MySQL数据库的一个简单封装。遵循了Python DB API v2。但是只支持Python2,目前还不支持Python3。mysqlclient:是MySQL-python的另外一个分支。支持Python3并且修复了一些bug,你可以认为它就是python2中传承给python3的原MySQLdb
但是mysqlclient驱动的用法,依然是MySQLdb的用法,上面代码例子也可以看出来,尝试import mysqlclient是不存在的。

四、SQLAlchemy

sqlAlchemy是python中著名的ORM(Object Relationship Mapping,对象关系映射)框架。
在常见的web框架中均有涉及,它可以用来进行多种常见数据库的操作。
作为入门篇这里简单提一句,后边会在使用时展开讨论。
如果想要专业py开发详解,请以@方式督促鸟群pyy大佬更文。

最后一句:本章节在数据库的具体操作上讲的不多,总感觉那一块输入SQL内容,并不属于python,故!嗯!

猜你喜欢

转载自blog.csdn.net/weixin_33862188/article/details/86928303