[MySQL & Python] 06. 使用Python进行数据操作

Python操作数据库的常用命令

#导入模块
import pymysql

#连接数据库,得到Connection对象
conn = pymysql.connect(host='127.0.0.1',port=3306, user='root', charset='utf8',passwd = "leo123123", db='day26db')

#从Connection对象生成Cursor对象
cursor = conn.cursor();

#使用Cursor对象进行数据添加(需要commit)
cursor.execute("insert into data(name, age, email) values ('William', 47,'William@qq.com')")
conn.commit();

#使用Cursor对象进行数据删除(需要commit)
cursor.execute("delete from data where name = 'William'")
conn.commit();

#使用Cursor对象进行数据修改(需要commit)
cursor.execute("update data set name=concat('SLQ-', name)")
conn.commit();

#使用Cursor对象进行数据查询
cursor.execute('select * from data')

#Cursor.fetchone()从查询结果中获取一条数据.
#返回结果为一个元组, 无数据返回None
result = cursor.fetchone();

#Cursor.fetchone()从查询结果中获取所有数据.
#返回结果为一个嵌套的元组((行1),(行2),(行3)), 无数据返回空元组()
result = cursor.fetchall();



#关闭连接
cursor.close()
conn.close()

 

操作范例

设计一段代码实现用户注册和登录的功能

#MYSQL中创建数据库
​
mysql> create database userdb default charset utf8 collate utf8_general_ci;
​
mysql> create table userdb (
    -> id int not null primary key auto_increment,
    -> name varchar(20) not null,
    -> password varchar(2) not null) default charset='utf8';
    
​
#Python代码
​
import pymysql
​
def register_user():
    print("用户注册")
​
    user = input("请输入用户名:")
    password = input("请输入密码:")
​
    conn = pymysql.connect(host='127.0.0.1', port=3306, \
                           user='root', charset="utf8", db="userdb")
​
    cursor = conn.cursor()
​
    slq = 'insert into user(name, password) values ("{}", "{}")'.format(user, password)
​
    cursor.execute(slq)
    conn.commit()
​
    cursor.close()
    conn.close()
​
​
def login():
    print("用户登陆")
​
    user = input("请输入用户名:")
    password = input("请输入密码:")
​
    conn = pymysql.connect(host='127.0.0.1', port=3306, \
                           user='root', passwd = 'pass123', charset="utf8", db="userdb")
    cursor = conn.cursor()
​
    sql = 'select * from user where name="{}" and password = "{}"'.format(user, password)
    cursor.execute(sql)
    #使用cursor.fetchone(),要么返回数值,要么返回None。
    #不可以fetchall,他永远都会返回元组,即使没有数据,也会返回一个空元组。
    result = cursor.fetchone()  
    print(result)
    
    cursor.close()
    conn.close()
​
    if result is None:
        print("登陆失败")
    else:
        print("登陆成功")
​
def run():
    choice = input('1.注册  2.登陆')
    if choice == "1":
        register_user()
    elif choice =="2":
        login()
    else:
        print('无效输入')
​
if __name__ == '__main__':
    run()
    
​

 

 

为了避免SQL注入问题,不建议用sql字符串进行数据的操作,改为使用Cursor.execute()方法来实现。

#第一种方式
#传入两个参数给cursor.execute方法。
#第一个参数是sql查询,需要替代的部分使用%s代替。
#第二个参数是一个列表或者元组,包含了sql语句中%s应被替代的内容。
cursor.execute("select * from users where username = %s and password = %s" , [usr, pwd])

#第二种方式
#传入两个参数给cursor.execute方法。
#第一个参数是sql查询,需要替代的部分使用%(名称)s代替。
#第二个参数是一个字典,使用键值对替代sql对应的内容。
cursor.execute("select * from users where username = %(usr)s and password = %(pwd)s" , {usr: "Leo", pwd:"123"})

 

 

 

posted on 2022-04-06 11:25  LeoZhangJing  阅读(37)  评论(0编辑  收藏  举报

导航