当前位置:首页 » 编程语言 » python与mysql连接

python与mysql连接

发布时间: 2025-06-16 09:31:32

python 进阶知识全篇-Python Mysql - mysql-connector

MySQL 是广泛使用的数据库管理系统,如果你对 MySQL 不够熟悉,建议先阅读我们的 MySQL 教程。此教程将带你深入了解如何通过 mysql-connector 来连接和操作 MySQL。

mysql-connector 是 MySQL 官方提供的驱动程序,能够帮助你轻松实现 Python 与 MySQL 之间的交互。你只需要使用 pip 命令安装它,具体命令如下:

python -m pip install mysql-connector

为验证安装是否成功,可以尝试运行以下测试代码:

import mysql.connector

执行此代码后若未出现错误提示,说明安装已成功。

若你的 MySQL 版本为 8.0,则需注意密码验证方式已从 mysql_native_password 更改为 caching_sha2_password。因此,在安装驱动后,还需对 my.ini 配置文件进行修改,并执行相应的 SQL 命令以确保密码验证方式符合新版本要求。更多详细操作,可以参考:阙赞:Python MySQL8.0 错误创建数据库连接。

连接数据库的操作可以通过以下 Python 代码实现:

import mysql.connector

尝试连接数据库,如果数据库不存在,代码将输出相应的错误信息。

数据库的创建则使用 "CREATE DATABASE" 语句。以下代码示例创建了一个名为 runoob_db 的数据库:

创建数据库前,可以使用 "SHOW DATABASES" 命令查看当前是否存在特定数据库:

执行此命令后,你将看到数据库列表。若数据库已存在,尝试再次创建将收到错误信息。

为了实现数据表的创建,我们使用 "CREATE TABLE" 语句。例如,以下代码创建了一个名为 sites 的数据表,包含字段 name 和 url:

执行此代码后,数据库中将出现名为 sites 的数据表。

可以使用 "SHOW TABLES" 命令查看数据表是否已成功创建。

通常,我们会为主键设置一个 INT AUTO_INCREMENT PRIMARY KEY,确保起始值为 1,并逐步递增。如果表已创建,可通过 ALTER TABLE 命令添加主键。

插入数据的关键操作使用 "INSERT INTO" 语句。以下代码插入了一条数据至 sites 表:

执行后,数据表中应新增一条记录。

批量插入数据时,利用 executemany() 方法,该方法接收元组列表作为参数,包含要插入的数据。下面代码示例批量插入多条记录至 sites 表:

执行后,输出应为插入记录成功的信息。

在数据插入后,若需获取新记录的 ID,可使用以下代码:

执行此代码后,输出应为插入记录成功,并显示其 ID。

查询数据使用 SELECT 语句,以下代码示例展示如何获取 sites 表中的所有数据:

执行后,输出结果将包含所有记录。

若仅需读取特定字段的数据,可以通过指定字段来获取。同样,利用 SELECT 语句,以下代码展示如何获取 sites 表中指定字段的数据:

执行后,输出结果将只包含指定字段。

如果只读取一条数据,可以使用 fetchone() 方法。以下代码示例展示如何仅读取第一条数据:

执行此代码后,输出结果应为一条记录。

使用 where 语句可以读取特定条件的数据。以下代码示例读取 name 字段为 'SHUAIGEGE' 的记录:

执行后,输出结果应为符合条件的记录。

通配符 % 可以用来匹配包含特定字符串的数据。以下代码示例读取包含 'google' 的记录:

执行后,输出结果应为包含 'google' 的所有记录。

为了防止 SQL 注入攻击,使用 %s 占位符来转义查询条件。以下代码示例展示如何安全地执行查询:

执行此代码后,输出结果应为安全查询到的数据。

数据查询结果可以通过 ORDER BY 语句进行排序,默认为升序,关键字为 ASC。若需设置降序排序,使用 DESC 关键字。以下代码示例展示如何按 name 字段升序排序查询结果:

执行后,输出结果应为按 name 字段升序排序后的所有记录。

降序排序的实现方法与升序类似,只需将 ASC 替换为 DESC 关键字。以下代码示例展示如何按 name 字段降序排序查询结果:

执行后,输出结果应为按 name 字段降序排序后的所有记录。

限制查询结果的数量可通过 LIMIT 语句实现,该语句允许指定返回的具体记录数。以下代码示例展示如何获取前 3 条记录:

执行后,输出结果应为前 3 条记录。

OFFSET 关键字用于指定起始位置,从而获取特定范围内的记录。以下代码示例展示如何从第二条记录开始获取前 3 条记录:

执行后,输出结果应为从第二条记录开始的前 3 条记录。

删除记录时,使用 DELETE FROM 语句,确保使用 WHERE 条件语句来指定要删除的记录,避免误删整个表。以下代码示例展示如何删除 name 为 'stackoverflow' 的记录:

执行后,输出结果应为删除的记录数量。

为了防止 SQL 注入攻击,使用 %s 占位符转义删除条件。以下代码示例展示如何安全地执行删除操作:

执行后,输出结果应为删除的记录数量。

更新表数据使用 UPDATE 语句,确保使用 WHERE 条件语句指定更新的数据行。以下代码示例展示如何将 name 为 'Zhihu' 的记录更新为 'ZH':

执行后,输出结果应为更新的记录数量。

使用 %s 占位符转义更新条件,以防止 SQL 注入攻击。以下代码示例展示如何安全地执行更新操作:

执行后,输出结果应为更新的记录数量。

删除表使用 DROP TABLE 语句,确保使用 IF EXISTS 关键字来判断表是否存在,避免操作不存在的表。以下代码示例展示如何删除名为 sites 的表:

㈡ python连接MySQL数据库问题 cursor( ) 、execute()和fetc

MySQLdb.connect是python 连接MySQL数据库的方法,在Python中 import MySQLdb即可使用,至于connect中的参数很简单:x0dx0ahost:MySQL服务器名x0dx0auser:数据库使用者x0dx0apassword:用户登录密码x0dx0adb:操作的数据库名x0dx0acharset:使用的字符集(一般是gb2312)x0dx0acursor = db.cursor() 其实就是用来获得python执行Mysql命令的方法,也就是x0dx0a我们所说的操作游标x0dx0a下面cursor.execute则是真正执行MySQL语句,即查询TABLE_PARAMS表的数据。x0dx0a至于fetchall()则是接收全部的返回结果行 row就是在python中定义的一个变量,用来接收返回结果行的每行数据。同样后面的r也是一个变量,用来接收row中的每个字符,如果写成C的形式就更好理解了x0dx0afor(string row = '' row<= cursor.fetchall(): row++)x0dx0a for(char r = '' r<= row; r++)x0dx0aprintf("%c", r);x0dx0a大致就是这么个意思!

㈢ Python连接mysql数据库及python使用mysqldb连接数据库教程

做python的时候需要用到数据库,于是自己重新整理了一下数据库的知识,并且熟悉了python中MysqlDB模块的功能和函数等接口,现在系统地来总结一下吧:

首先你要做的还是下载相应的模块并且安装啦,下载地址自己搜,网上有很多,安装的话也很好办,安装之后python的安装目录下的Lib文件夹下的site-packages文件夹下的MySQLdb文件夹,这之中存放的便是该模块的定义。准备工作做好之后我们需要在源码中import MySQLdb

数据库的连接:

模块引入之后我们就需要和数据库进行连接了,实例代码如下:

db = MySQLdb.connect("localhost","root","123456","myciti" )

这三个关键参数的含义一目了然:第一个为服务器的地址,第二个为用户名,第三个为dbms密码,第四个为要访问的数据库,其实该connect函数的参数不止这些,不过由于其有默认值而且大多数情况下不用修改,因而省略了。这里做如下列表:

host,连接的数据库服务器主机名,默认为本地主机(localhost)。

user,连接数据库的用户名,默认为当前用户。

passwd,连接密码,没有默认值。

db,连接的数据库名,没有默认值。

conv,将文字映射到Python类型的字典。默认为MySQLdb.converters.conversions

cursorclass,cursor()使用的种类,默认值为MySQLdb.cursors.Cursor。

compress,启用协议压缩功能。

named_pipe,在windows中,与一个命名管道相连接。

init_command,一旦连接建立,就为数据库服务器指定一条语句来运行。

read_default_file,使用指定的MySQL配置文件。

read_default_group,读取的默认组。

unix_socket,在unix中,连接使用的套接字,默认使用TCP。

port,指定数据库服务器的连接端口,默认是3306

大家可能会注意到源码中没有用到端口号,这是因为MySQLdb的connect函数的该参数的默认值便是3306,如果你在安装mysql的时候修改了数据库的端口号,那么你就需要在源码中加上该参数的修改值了。

一,安装mysql

如果是windows 用户,mysql 的安装非常简单,直接下载安装文件,双击安装文件一步一步进行操作即可。

linux 下的安装可能会更加简单,除了下载安装包进行安装外,一般的linux 仓库中都会有mysql ,我们只需要通过一个命令就可以下载安装:

Ubuntudeepin

>>sudo apt-get install mysql-server

>>Sudo apt-get install mysql-client

centOS/redhat

>>yum install mysql

二,安装MySQL-python

要想使python可以操作mysql 就需要MySQL-python驱动,它是python 操作mysql必不可少的模块。

下载地址:https://pypi.python.org/pypi/MySQL-python/

下载MySQL-python-1.2.5.zip 文件之后直接解压。进入MySQL-python-1.2.5目录:

>>python setup.py install

三,测试

测试非常简单,检查MySQLdb 模块是否可以正常导入。

fnngj@fnngj-H24X:~/pyse$ python

Python 2.7.4 (default, Sep 26 2013, 03:20:56)

[GCC 4.7.3] on linux2

Type "help", "right", "credits" or "license" for more information.

>>> import MySQLdb

没有报错提示MySQLdb模块找不到,说明安装OK ,下面开始使用python 操作数据库之前,我们有必要来回顾一下mysql的基本操作:

四,mysql 的基本操作

$ mysql -u root -p (有密码时)

$ mysql -u root (无密码时)

mysql> show databases; // 查看当前所有的数据库

+--------------------+

| Database |

+--------------------+

| information_schema |

| csvt |

| csvt04 |

| mysql |

| performance_schema |

| test |

+--------------------+

6 rows in set (0.18 sec)

mysql> use test; //作用与test数据库

Database changed

mysql> show tables; //查看test库下面的表

Empty set (0.00 sec)

//创建user表,name 和password 两个字段

mysql> CREATE TABLE user (name VARCHAR(20),password VARCHAR(20)); Query OK, 0 rows affected (0.27 sec)

//向user表内插入若干条数据

mysql> insert into user values('Tom',񟢙');Query OK, 1 row affected (0.05 sec)

mysql> insert into user values('Alen',񡈳');Query OK, 1 row affected (0.08 sec)

mysql> insert into user values('Jack',񡂏');Query OK, 1 row affected (0.04 sec)

//查看user表的数据

mysql> select * from user;+------+----------+

| name | password |

+------+----------+

| Tom | 1321 |

| Alen | 7875 |

| Jack | 7455 |

+------+----------+

3 rows in set (0.01 sec)

//删除name 等于Jack的数据

mysql> delete from user where name = 'Jack'Query OK, 1 rows affected (0.06 sec)

//修改name等于Alen 的password 为 1111

mysql> update user set password=񟟇' where name = 'Alen'Query OK, 1 row affected (0.05 sec)

Rows matched: 1 Changed: 1 Warnings: 0

//查看表内容

mysql> select * from user;+--------+----------+

| name | password |

+--------+----------+

| Tom | 1321 |

| Alen | 1111 |

+--------+----------+

3 rows in set (0.00 sec)

五,python 操作mysql数据库基础

#coding=utf-8import MySQLdb

conn= MySQLdb.connect(

host='localhost',

port = 3306,

user='root',

passwd=�',

db ='test',

)

cur = conn.cursor()#创建数据表#cur.execute("create table student(id int ,name varchar(20),class varchar(30),age varchar(10))")#插入一条数据#cur.execute("insert into student values(ƈ','Tom',Ɖ year 2 class',Ə')")#修改查询条件的数据#cur.execute("update student set class=Ɖ year 1 class' where name = 'Tom'")#删除查询条件的数据#cur.execute("delete from student where age=Ə'")cur.close()

conn.commit()

conn.close()

>>> conn = MySQLdb.connect(host='localhost',port = 3306,user='root', passwd=�',db ='test',)

Connect() 方法用于创建数据库的连接,里面可以指定参数:用户名,密码,主机等信息。

这只是连接到了数据库,要想操作数据库需要创建游标。

>>> cur = conn.cursor()

通过获取到的数据库连接conn下的cursor()方法来创建游标。

>>> cur.execute("create table student(id int ,name varchar(20),class varchar(30),age varchar(10))")

通过游标cur 操作execute()方法可以写入纯sql语句。通过execute()方法中写如sql语句来对数据进行操作。

>>>cur.close()

cur.close() 关闭游标

>>>conn.commit()

conn.commit()方法在提交事物,在向数据库插入一条数据时必须要有这个方法,否则数据不会被真正的插入。

>>>conn.close()

Conn.close()关闭数据库连接

六,插入数据

通过上面execute()方法中写入纯的sql语句来插入数据并不方便。如:

>>>cur.execute("insert into student values(ƈ','Tom',Ɖ year 2 class',Ə')")

我要想插入新的数据,必须要对这条语句中的值做修改。我们可以做如下修改:

#coding=utf-8import MySQLdb

conn= MySQLdb.connect(

host='localhost',

port = 3306,

user='root',

passwd=�',

db ='test',

)

cur = conn.cursor()#插入一条数据sqli="insert into student values(%s,%s,%s,%s)"cur.execute(sqli,(Ɖ','Huhu',ƈ year 1 class',ƍ'))

cur.close()

conn.commit()

conn.close()

假如要一次向数据表中插入多条值呢?

#coding=utf-8import MySQLdb

conn= MySQLdb.connect(

host='localhost',

port = 3306,

user='root',

passwd=�',

db ='test',

)

cur = conn.cursor()#一次插入多条记录sqli="insert into student values(%s,%s,%s,%s)"cur.executemany(sqli,[

(Ɖ','Tom',Ƈ year 1 class',ƌ'),

(Ɖ','Jack',ƈ year 1 class',ƍ'),

(Ɖ','Yaheng',ƈ year 2 class',ƍ'),

])

cur.close()

conn.commit()

conn.close()

executemany()方法可以一次插入多条值,执行单挑sql语句,但是重复执行参数列表里的参数,返回值为受影响的行数。

七,查询数据

也许你已经尝试了在python中通过

>>>cur.execute("select * from student")

来查询数据表中的数据,但它并没有把表中的数据打印出来,有些失望。

来看看这条语句获得的是什么

>>>aa=cur.execute("select * from student")

>>>print aa

5

它获得的只是我们的表中有多少条数据。那怎样才能获得表中的数据呢?进入python shell

>>> import MySQLdb>>> conn = MySQLdb.connect(host='localhost',port = 3306,user='root', passwd=�',db ='test',)>>> cur = conn.cursor()>>> cur.execute("select * from student")5L

>>> cur.fetchone()

(1L, 'Alen', Ƈ year 2 class', ƌ')>>> cur.fetchone()

(3L, 'Huhu', ƈ year 1 class', ƍ')>>> cur.fetchone()

(3L, 'Tom', Ƈ year 1 class', ƌ')

...>>>cur.scroll(0,'absolute')

fetchone()方法可以帮助我们获得表中的数据,可是每次执行cur.fetchone() 获得的数据都不一样,换句话说我没执行一次,游标会从表中的第一条数据移动到下一条数据的位置,所以,我再次执行的时候得到的是第二条数据。

scroll(0,'absolute') 方法可以将游标定位到表中的第一条数据。

还是没解决我们想要的结果,如何获得表中的多条数据并打印出来呢?

#coding=utf-8import MySQLdb

conn= MySQLdb.connect(

host='localhost',

port = 3306,

user='root',

passwd=�',

db ='test',

)

cur = conn.cursor()#获得表中有多少条数据aa=cur.execute("select * from student")print aa#打印表中的多少数据info = cur.fetchmany(aa)for ii in info: print ii

cur.close()

conn.commit()

conn.close()

通过之前的print aa 我们知道当前的表中有5条数据,fetchmany()方法可以获得多条数据,但需要指定数据的条数,通过一个for循环就可以把多条数据打印出啦!执行结果如下:

5(1L, 'Alen', Ƈ year 2 class', ƌ')

(3L, 'Huhu', ƈ year 1 class', ƍ')

(3L, 'Tom', Ƈ year 1 class', ƌ')

(3L, 'Jack', ƈ year 1 class', ƍ')

(3L, 'Yaheng', ƈ year 2 class', ƍ')

[Finished in 0.1s]

热点内容
java返回this 发布:2025-10-20 08:28:16 浏览:593
制作脚本网站 发布:2025-10-20 08:17:34 浏览:888
python中的init方法 发布:2025-10-20 08:17:33 浏览:582
图案密码什么意思 发布:2025-10-20 08:16:56 浏览:765
怎么清理微信视频缓存 发布:2025-10-20 08:12:37 浏览:684
c语言编译器怎么看执行过程 发布:2025-10-20 08:00:32 浏览:1013
邮箱如何填写发信服务器 发布:2025-10-20 07:45:27 浏览:255
shell脚本入门案例 发布:2025-10-20 07:44:45 浏览:114
怎么上传照片浏览上传 发布:2025-10-20 07:44:03 浏览:806
python股票数据获取 发布:2025-10-20 07:39:44 浏览:713