赞
踩
我使用pymysql出现了以下的错误
python-module 'pymysql' has no attribute 'connect'
一出错 我本能的想去看下是不是我没连接成功 然后 pip3 install pymysql
不要起import的包名作为文件名啊!!!
因此,我总结了下pymysql的基本使用
PyMySQL是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中是使用mysqldb。
PyMySQL安装
pip3 install pymysql
创建链接的基本使用
- # 导入pymysql模块
- import pymysql
-
- # 连接database
- conn = pymysql.connect(
- host=“你的数据库地址”,
- user=“用户名”,password=“密码”,
- database=“数据库名”,
- charset=“utf8”)
-
- # 得到一个可以执行SQL语句的光标对象
- cursor = conn.cursor() # 执行完毕返回的结果集默认以元组显示
- # 得到一个可以执行SQL语句并且将结果作为字典返回的游标
- #cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
-
- # 定义要执行的SQL语句
- sql = """
- CREATE TABLE USER1 (
- id INT auto_increment PRIMARY KEY ,
- name CHAR(10) NOT NULL UNIQUE,
- age TINYINT NOT NULL
- )ENGINE=innodb DEFAULT CHARSET=utf8; #注意:charset='utf8' 不能写成utf-8
- """
-
- # 执行SQL语句
- cursor.execute(sql)
-
- # 关闭光标对象
- cursor.close()
-
- # 关闭数据库连接
- conn.close()
在建链接之前,我们需要做好一些前期工作:建库建表
下面例子中 我将使用我建好的库:db= 'xing'
建好的userinfo表
简单验证功能
- # pip3 install pymysql
- import pymysql
-
- user=input('user>>: ').strip()
- pwd=input('password>>: ').strip()
-
- # 建立链接
- conn=pymysql.connect(
- host='192.168.0.103',#我的IP地址
- port=3306, # 不是字符串不需要加引号。
- user='root',
- password='123',
- db='xing',
- charset='utf8'
- )
-
- # 拿到游标
- cursor=conn.cursor()
-
- # 执行sql语句
-
- sql='select * from userinfo where user = "%s" and pwd="%s"' % (user, pwd)
- print(sql)
- res=cursor.execute(sql)
- print(res)
-
- cursor.close()
- conn.close()
-
- # 进行判断
- if res:
- print('登录成功')
- else:
- print('登录失败')
输出结果:
但是会有以下问题:输入的SQL 语句被注释了
或者是
这个时候之后 我们可以这样解决
- execute帮我们做字符串拼接
-
- # 将以下代码
- sql="select * from userinfo where name='%s' and password='%s'" %(user,pwd)
- res=cursor.execute(sql)
- # 改为
- sql="select * from userinfo where name=%s and password=%s" #%s需要去掉引号,pymysql会自动加上
-
- res=cursor.execute(sql,[user,pwd])
输出结果:
- import pymysql
-
- conn = pymysql.connect(
- host='192.168.0.103',
- port=3306,
- user='root',
- password='123',
- database='xing',
- charset='utf8'
- )
- # 获取一个光标
- cursor = conn.cursor()
-
- # 定义要执行的sql语句
- sql = 'insert into userinfo(user,pwd) values(%s,%s);'
- data = [
- ('july', '147'),
- ('june', '258'),
- ('marin', '369')
- ]
- # 拼接并执行sql语句
- cursor.executemany(sql, data)
-
- # 涉及写操作要注意提交
- conn.commit()
-
- # 关闭连接
- cursor.close()
- conn.close()
输出结果:
- import pymysql
- conn =pymysql.connect(
- host ='192.168.0.103',
- port = 3306,
- user = 'root',
- password ='123',
- database ='xing',
- charset ='utf8'
- )
- cursor =conn.cursor() #获取一个光标
- sql ='insert into userinfo (user,pwd) values (%s,%s);'
-
- name = 'wuli'
- pwd = '123456789'
- cursor.execute(sql, [name, pwd])
- conn.commit()
- cursor.close()
- conn.close()
输出结果:
- import pymysql
-
- # 建立连接
- conn = pymysql.connect(
- host="192.168.0.103",
- port=3306,
- user="root",
- password="123",
- database="xing",
- charset="utf8"
- )
- # 获取一个光标
- cursor = conn.cursor()
- # 定义将要执行的SQL语句
- sql = "insert into userinfo (user, pwd) values (%s, %s);"
- name = "wuli"
- pwd = "123456789"
- # 并执行SQL语句
- cursor.execute(sql, [name, pwd])
- # 涉及写操作注意要提交
- conn.commit()
- # 关闭连接
-
- # 获取最新的那一条数据的ID
- last_id = cursor.lastrowid
- print("最后一条数据的ID是:", last_id)
-
- cursor.close()
- conn.close()
输出结果为:(因为我之前插入多条记录时,多运行了两次,所有结果下面的这个)
- import pymysql
-
- # 建立连接
- conn = pymysql.connect(
- host="192.168.0.103",
- port=3306,
- user="root",
- password="123",
- database="xing",
- charset="utf8"
- )
- # 获取一个光标
- cursor = conn.cursor()
- # 定义将要执行的SQL语句
- sql = "delete from userinfo where user=%s;"
- name = "june"
- # 拼接并执行SQL语句
- cursor.execute(sql, [name])
- # 涉及写操作注意要提交
- conn.commit()
- # 关闭连接
-
- cursor.close()
- conn.close()
输出结果是:
- import pymysql
-
- # 建立连接
- conn = pymysql.connect(
- host="192.168.0.103",
- port=3306,
- user="root",
- password="123",
- database="xing",
- charset="utf8"
- )
- # 获取一个光标
- cursor = conn.cursor()
- # 定义将要执行的SQL语句
- sql = "update userinfo set pwd=%s where user=%s;"
- # 拼接并执行SQL语句
- cursor.execute(sql, ["july", "july"])
-
- # 涉及写操作注意要提交
- conn.commit()
-
- # 关闭连接
- cursor.close ()
- conn.close ()
fetch数据
- import pymysql
-
- conn = pymysql.connect (
- host='192.168.0.103',
- port=3306,
- user='root',
- password='123',
- database='xing',
- charset='utf8'
- )
- # 获取一个光标
- cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 返回字典数据类型
-
- # 定义将要执行的sql语句
- sql = 'select user,pwd from userinfo;'
- # 拼接并执行sql语句
- cursor.execute(sql)
-
- # 取到查询结果
- ret1 = cursor.fetchone() # 取一条
- ret2 = cursor.fetchmany(3) # 取三条
- ret3 = cursor.fetchone() # 取一条
-
- cursor.close()
- conn.close()
-
- print(ret1)
- print(ret2)
- print(ret3)
- # 可以获取指定数量的数据
- cursor.fetchmany(3)
- # 光标按绝对位置移动1
- cursor.scroll(1, mode="absolute")
- # 光标按照相对位置(当前位置)移动1
- cursor.scroll(1, mode="relative")
- import pymysql
-
- # 建立连接
- conn = pymysql.connect(
- host="192.168.0.103",
- port=3306,
- user="root",
- password="123",
- database="xing",
- charset="utf8"
- )
- # 获取一个光标
- cursor = conn.cursor()
- # 定义将要执行的SQL语句
- sql1 = "insert into userinfo (user, pwd) values (%s, %s);"
- sql2 = "insert into hobby (id, hobby) values (%s,%s);"
- user = "july1"
- pwd = "july1"
- id = "我是错误的id" #id = "3"
- hobby = "打游戏"
- try:
- # 拼接并执行SQL语句
- cursor.execute(sql1, [user, pwd])
- print(sql1)
- cursor.execute(sql2, [id, hobby]) # 报错的SQL语句
- # 涉及写操作注意要提交
- conn.commit()
- except Exception as e:
- print(str(e))
- # 有异常就回滚
- conn.rollback()
-
- # 关闭连接
- cursor.close()
- conn.close()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。