Home > Database > Mysql Tutorial > How pymysql operates mysql database

How pymysql operates mysql database

PHPz
Release: 2023-05-30 17:40:06
forward
1706 people have browsed it

1. pymysql.connent

Usage: Create a link

Syntax: conn = pymysql.connect(host=‘127.0.0.1’ , port=port number, user=‘database user name’, passwd=‘password’, db=‘database name’)

conn = pymysql.connect(host='127.0.0.1', 
                 port=3306, user='root', passwd='@123456', db='db4')
Copy after login

2, conn.cursor()

Usage: Create cursor

cursor = conn.cursor()
Copy after login

Set the cursor to dictionary type

# 游标设置为字典类型
cursor = conn.cursor("cursor"=pymysql.cursors.DictCursor)

栗子:
sql = "select * from department;"
# 执行sql语句的函数,使用下面函数进行拼接,防止SQL注入
cursor.execute(sql)
# cursor.scroll(1,mode='relative')
result = cursor.fetchone()
print(result)
输出结果:
{'id': 1, 'title': '财务'}
Copy after login

3, cursor.execute()

Usage: Execute sql statements

cursor.execute(sql)
Copy after login

4. cursor.executemany()

Usage: Execute sql statements in batches

cursor.executemany(sql,[('销售'), ('经理')])
Copy after login

5, cursor.fetchone()

Usage: SQL execution select only gets one result by default. If you execute the statement multiple times, you can get the data in sequence

import  pymysql
# 创建链接,跟socket服务类似
conn = pymysql.connect(host='127.0.0.1', port=3306, 
                 user='root', passwd='@123456', db='db4')
# 创建游标(相当与创建一个拿数据的手)
cursor = conn.cursor()
# 创建要执行的SQL语句
sql = "select * from department;"
# 执行sql语句的函数,使用下面函数进行拼接,防止SQL注入
cursor.execute(sql)
result = cursor.fetchone()
print(result)
result = cursor.fetchone()
print(result)
result = cursor.fetchone()
print(result)
# 关闭链接
cursor.close()
conn.close()
·
输出结果:
(1, '财务')
(2, '公关')
(3, '测试')
Copy after login

6. cursor.scroll()

Usage: Note: When fetching data, proceed in order. You can use cursor.scroll(num, mode) to move the cursor position, such as:

  • cursor.scroll(1,mode=‘relative’) # Move relative to the current position

  • cursor.scroll(2,mode= ‘absolute’) # Relative absolute position movement

Table structure:

How pymysql operates mysql database

## Chestnut:

1、
cursor.execute(sql)
result = cursor.fetchone()
print(result)
输出结果:
(1, '财务')
2、
cursor.execute(sql)
cursor.scroll(1,mode='absolute')
result = cursor.fetchone()
print(result)
输出结果:
(2, '公关')
3、
cursor.execute(sql)
cursor.scroll(1,mode='relative')
result = cursor.fetchone()
print(result)
输出结果:
(2, '公关')
Copy after login
7, cursor.fetchmany()

Usage: You can set the number of return values ​​cursor.fetchmany(num)

cursor.execute(sql)
# cursor.scroll(1,mode='relative')
# result = cursor.fetchone()
# print(result)
result = cursor.fetchmany(2)
print(result)
输出结果:
((1, '财务'), (2, '公关'))
Copy after login
8, cursor.fetchall()

Usage: As the name suggests, it is to get all the results

sql = "select * from department;"
# 执行sql语句的函数,使用下面函数进行拼接,防止SQL注入
cursor.execute(sql)
# cursor.scroll(1,mode='relative')
# result = cursor.fetchone()
# print(result)
# result = cursor.fetchmany(2)
# print(result)
result = cursor.fetchall()
print(result)
输出结果:
((1, '财务'), (2, '公关'), (3, '测试'), (4, '运维'), (5, '销售'))
Copy after login
9, cursor.lastrowid()

Usage: Get the auto-increment ID of newly created data. If multiple pieces of data are added, only the auto-increment ID of the last inserted piece of data will be returned.

PS: If you only want one One can only insert the ID one by one

sql = "insert into department(title) values(%s)"

cursor.executemany(sql,[('经理')])
# 获取插入值的自增id
print(cursor.lastrowid)
# 将执行的结果提交到表中,否则表不会发生变换
conn.commit()
输出结果:
6
Copy after login
10. Today’s exercise

Question requirements:

Exercise:

Permission management
Permission table:
1. Order management
2. User management
3. Menu management
4. Permission allocation
5. Bug management
User table:
1. Cai Xukun
2. Chicken brother
3. Kun brother
User relationship permission table:
1 1
1 2
2 1
Python implementation:
After a user logs in, he can view all his permissions

## Answer to the question:

【1、创建权限表】

CREATE TABLE power (
	pid INT auto_increment PRIMARY KEY,
	purview	CHAR(10)
)ENGINE= INNODB DEFAULT CHARSET= utf8;

【2、创建用户表】
CREATE TABLE users (
	uid INT auto_increment PRIMARY KEY,
	username	CHAR(10)
)ENGINE= INNODB DEFAULT CHARSET= utf8;

【3、创建用户权限关系表】
CREATE TABLE use_pow (
	upid INT auto_increment PRIMARY KEY,
	power_id INT,
	user_id INT,
	UNIQUE uq_pid_uid(power_id, user_id),
	CONSTRAINT fk_pow FOREIGN KEY (power_id) REFERENCES power(pid),
	CONSTRAINT fk_user FOREIGN KEY (user_id) REFERENCES users(uid)
)ENGINE= INNODB DEFAULT CHARSET= utf8;

py文件:
import pymysql
user = input('请输入用户名称>>>')
# 连接数据库
conn  = pymysql.connect(host='127.0.0.1', port=3306, 
                  user='root', passwd='@123456', db='db_grant')

# 创建光标
cursor = conn.cursor()

# 查询是否存在该用户
sql = "SELECT uid FROM users WHERE username = %(u)s"

cursor.execute(sql, {'u': user})
# 获取到用户的id
uid = cursor.fetchone()
# print(uid[0], type(uid[0]))
if uid:
# 这里的%s如果换成%d就会报错因为execute无论传入什么类型都要用%s来占位
sql2 = "SELECT purview from power WHERE pid in 
(SELECT power_id FROM use_pow WHERE user_id = %s)"
cursor.execute(sql2, uid[0])
result = cursor.fetchall()
print(result)
else:
print("没有该用户")
cursor.close()
conn.close()
Copy after login

The above is the detailed content of How pymysql operates mysql database. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:yisu.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template