python操作MySQL数据库

Posted 小学弟-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python操作MySQL数据库相关的知识,希望对你有一定的参考价值。

=============python操作MySQL============

一、链接,执行sql,关闭(游标)

import pymysql # 导入模块
user= input(用户名:>>).strip()
pwd= input(密码:>>).strip()

#先链接,拿到游标
conn=pymysql.connect(host=localhost,user=root,password=密码, database=数据库名,charset=utf8)
cursor=conn.cursor() #拿到游标,即mysql >
#执行sql
sql=select * from userinfo where user="%s" and password="%s";%(user,pwd)
print(sql) #注意%s需要加双引号
rows = cursor.execute(sql)  #拿到受影响的行数

cursor.close()
conn.close()

if rows:
    print(登录成功)
else:
    print(登录失败)

二、execute()之sql注入

    - 注意:符号--会注释掉它之后的sql,正确的语法是:--后面至少有一个任意字符

    根本原理:就是根据程序的字符串拼接name=%s,当输入一个xxx--nnn,我们输入的xxx加在程序中拼接成一个
    判断条件name=xxx--nnn    
    -sql注入的两种情况
        1.sql注入之:用户存在,绕过密码
            name -- 任意字符
        2.sql注入之:用户不存在,绕过用户与密码
            xxx or 1=1 --任意字符

    解释注入:
        # 原来是我们对sql进行字符串拼接
        # sql="select * from userinfo where name=‘%s‘ and password=‘%s‘" %(user,pwd)
        # print(sql)
        # rows=cursor.execute(sql)

        #改写为(execute帮我们做字符串拼接,我们无需且一定不能再为%s加引号了)
        sql="select * from userinfo where name=%s
         and password=%s" #!!!注意%s需要去掉引号,因为pymysql会自动为我们加上
        rows=cursor.execute(sql,[user,pwd])
        #pymysql模块自动帮我们解决sql注入的问题,只要我们按照pymysql的规矩来。

        -- execute源码解释
        def execute(self, query, args=None):
        """Execute a query

        :param str query: Query to execute.

        :param args: parameters used with query. (optional)
        :type args: tuple, list or dict

        :return: Number of affected rows
        :rtype: int

        If args is a list or tuple, %s can be used as a placeholder in the query.
        If args is a dict, %(name)s can be used as a placeholder in the query.
        """

三、增、删、改、查:conn.commit()

=======import pymysql
先链接,拿到游标
conn=pymysql.connect(host=localhost,user=root,password=密码,database=数据库名)
cursor=conn.cursor() #拿到游标,即mysql >
#执行sql   增:
sql=insert into user1(user,password) VALUES (%s,%s)
print(sql)
# rows = cursor.execute(sql,(‘xixi‘,123))  #插入一条记录  #参数:数组。字典。元组
rows = cursor.executemany(sql,[(xixi,123),(aaa,456),(ttt,147)]) #插入多行记录
print(%s row in set (0.00 sec)%rows)

conn.commit() #提交到数据库
cursor.close()
conn.close()

=======import pymysql
#先链接,拿到游标
name=input(>>).strip()
conn=pymysql.connect(host=localhost,user=root,password=密码,database=数据库名)
cursor=conn.cursor() #拿到游标,即mysql >
#执行sql   删:
sql=delete from user1 where user =%s;  #删除数据
print(sql)
rows = cursor.execute(sql,(name))
print(%s row in set (0.00 sec)%rows)

conn.commit() #提交到数据库
cursor.close()
conn.close()

=======import pymysql
#先链接,拿到游标
id=input(>>).strip()
conn=pymysql.connect(host=localhost,user=root,password=密码,database=数据库名)
cursor=conn.cursor() #拿到游标,即mysql >
#执行sql   改:
sql= update user1 set password = "5555555" where id=%s;
print(sql)
rows = cursor.execute(sql,(id))
print(%s row in set (0.00 sec)%rows)

conn.commit() #提交到数据库
cursor.close()
conn.close()


========查(fetchont,fetchmany.fetchall)

---------查fetchone,fetchmany,fetchall-----------
import pymysql
conn=pymysql.connect(host=localhost,user=root,password=密码,database=数据库名)
cursor=conn.cursor() #拿到游标,即mysql >
#执行sql   查:
sql=select * from user1;
rows = cursor.execute(sql)

#查单条fetchone
res1=cursor.fetchone()
res2=cursor.fetchone()
res3=cursor.fetchone()
print(res1)
print(res2)
print(res3)
print(res3[0])
#查多条fetchmany
print(cursor.fetchmany(3))
print(cursor.fetchone())
#查所有fetchall
print(cursor.fetchall())
print(cursor.fetchone())

#-------光标的移动--------
#1.绝对路径:从文件的开头位置算起
print(cursor.fetchall())
cursor.scroll(1,mode=absolute)
print(cursor.fetchone())
cursor.scroll(3,mode=absolute)
print(cursor.fetchone())

#2.相对路径:
print(cursor.fetchone())
print(cursor.fetchone())
cursor.scroll(2,mode=relative) #相对于上面的两条向后移两条
print(cursor.fetchone())

print(%s row in set (0.00 sec) %rows)
cursor.close()
conn.close()

四、获取插入后的最后一条数据的自增ID

------查看表中最后一行的iD
import pymysql
conn=pymysql.connect(host=localhost,user=root,password=喵喵6,database=数据库名,charset=utf8)
cursor=conn.cursor()


sql=insert into user1(user,password) values(%s,%s);
rows=cursor.execute(sql,(name,123))
# rows=cursor.executemany(sql,[(‘aaa‘,‘123‘),(‘bbb‘,‘123‘),(‘ccc‘,‘12323‘)])
conn.commit()
print(cursor.lastrowid)  #查看表中最后一行的iD

cursor.close()
conn.close()

 

以上是关于python操作MySQL数据库的主要内容,如果未能解决你的问题,请参考以下文章

部分代码片段

在 Python代码中操作mysql数据

通过Python代码操作MySQL:

python 用于数据探索的Python代码片段(例如,在数据科学项目中)

如何在片段中填充列表视图?

用python操作mysql数据库(之代码归类)