python-10 django Pymysql 操作总结

一 django ORM 操作总结:

4.将models.py中的数据库表结构同步到MYSQL中

C:\Users\WYS\myweb>python manage.py migrate #创建表结构
C:\Users\WYS\myweb>python manage.py makemigrations myapp #告诉django,myapp中的表结构有更新
C:\Users\WYS\myweb>python manage.py migrate myapp  #执行myapp中的表结构到mysql中

数据库中的表名为myapp_book_info,myapp_site_info,但django代码中调用时的表名为models.py中定义的表名book_info,site_info

5.数据表操作-增

from myapp.models import book_info
test1 = book_info(fromuser='testuser',fromsite='testsite',bookname='testbookname')
test1.save()
book_info.objects.create(fromuser='testuser',fromsite='testsite',bookname='testbookname')

6.数据库操作-删

test1 = book_info.objects.get(bookname='testbookname')
test1.delete()
book_info.objects.filter(bookname='testbookname').delete()
book_info.objects.all().delete()

7.数据库操作-改

test1 = book_info.objects.get(bookname='testbookname')
test1.bookname = 'book1'
test1.fromuser = 'user1'
test1.save
book_info.objects.filter(bookname='testbookname').update(fromuser='user1')
book_info.objects.all().update(fromuser='user1')

8.数据库操作-查

list = book_info.objects.all()
for i in list:
    print(i.book_name)
list = book_info.objects.filter(bookname='testbookname', fromuser='testuser')  #类似于SQL中的WHERE
list = book_info.objects.filter( fromuser__contains='testuser')  #注意中间是双下划线,类似于SQL中的where fromuser like "%testuser%" 
#此外还有icontains(大小写无关的like),startswith和endswith, 还有range(SQL BETWEEN查询)
list = book_info.objects.get(bookname='testbookname')  #返回单条记录,不需要for直接list.bookname使用
list = book_info.objects.filter().exclude().filter() #可无限嵌套
book_info.object.all()[:5]  #前5条记录
book_info.object.order_by(bookname)[2:5]  #排序后的第3、4、5条记录
book_info.object.order_by(bookname)[0]  #排序后的第1条记录
book_info.object.order_by(bookname)[0:1].get() #排序后的第1条记录
book_info.object.all()[:10:2]  #从第1条记录到第11条记录步长为2的数据集

[复制代码](javascript:void(0)😉

__exact 精确等于 like ‘aaa’ 
__iexact 精确等于 忽略大小写 ilike ‘aaa’ 
__contains 包含 like ‘%aaa%’ 
__icontains 包含 忽略大小写 ilike ‘%aaa%’,但是对于sqlite来说,contains的作用效果等同于icontains。 
__gt 大于 
__gte 大于等于 
__lt 小于 
__lte 小于等于 
__in 存在于一个list范围内 
__startswith 以…开头 
__istartswith 以…开头 忽略大小写 
__endswith 以…结尾 
__iendswith 以…结尾,忽略大小写 
__range 在…范围内 
__year 日期字段的年份 
__month 日期字段的月份 
__day 日期字段的日 
__isnull=True/False 
__isnull=True 与 __exact=None的区别

pymysql 操作实例:

# 操作流程
# 1、创建数据库链接
# 2、创建游标
# 3、执行命令
# 4、关闭链接
import pymysql

# 创建数据库链接
db = pymysql.connect(
    host="192.168.66.100",  # 主机ip
    user="root",  # 数据库用户
    password="123qwe",  # 用户对应的密码
    database="catdb",  # 对应的数据库
    port=13306,  # 数据库端口,默认3306
    charset='utf8'  # 数据库编码
)
# 创建游标:游标用于传递python给mysql的命令和mysql返回的内容
cursor = db.cursor()
# 执行部分
'''
for i in range(100):
    y = '王' + str(i+1)
    sql = "insert into catdb.stu (name,age) values ('%s',23)" % (y)
    print(sql)
    #执行sql语句
    try:
        cursor.execute(sql)
        db.commit()
    #错误回滚
    except:
        db.rollback()
cursor.close()  # 关闭游标
db.close()  # 关闭链接
'''
exe = cursor.execute("select * from stu where age >23;")  # 执行命令,返回查询的条数
print(exe)
# result = cursor.fetchone()
# result = cursor.fetchmany(3)
result = cursor.fetchall()  # 查询结果
print(result)
# 关闭部分
db.commit()  # 链接提交,用于对数据库的增删改
cursor.close()  # 关闭游标
db.close()  # 关闭链接

以类方法调用

#创建db_config.py文件
import pymysql
class Exe_sql(object):
    def exe_sql(sql):
        # 创建数据库链接
        db = pymysql.connect(
            host="192.168.66.100",  # 主机ip
            user="root",  # 数据库用户
            password="123qwe",  # 用户对应的密码
            database="catdb",  # 对应的数据库
            port=13306,  # 数据库端口,默认3306
            charset='utf8'  # 数据库编码
        )
        # 创建游标:游标用于传递python给mysql的命令和mysql返回的内容
        cursor = db.cursor()
        #执行sql语句
        try:
            cursor.execute(sql)
            db.commit()
        # 错误回滚
        except:
            db.rollback()
        result = cursor.fetchall()  # 查询结果
        # 关闭部分
        db.commit()  # 链接提交,用于对数据库的增删改
        cursor.close()  # 关闭游标
        db.close()  # 关闭链接
        return result
#调用db_config.py模块里的类方法
from db_config import Exe_sql
#最多3次登陆验证
count = 1
while count <= 3:
    username = input('用户名:')
    password = input('密码:')
    code = '123'
    your_code = input('验证码:')

    # 格式化输出sql语句
    LoginCheck_sql = '''select name,password from catdb.stu where name = "%s" and password = "%s";''' % (username, password)
    # 调用 Exe_sql 类方法,进行数据库查询认证!!!
    result = Exe_sql.exe_sql(LoginCheck_sql)

    if result:
        if your_code == code:
            if result[0][0] == username and result[0][1] == password:
                print('登录成功')
                break
        else:
            print('验证码错误,您还有%d次机会' % (3-count))
            count += 1
            if count > 3:
                print('您今日登录次数已用完,为确保账户安全,账户已锁定,请明日登录或者联系官方进行验证码重置。')
                break
    else:
        print('用户名或密码错误,请重新登录')
        break
posted @ 2020-02-21 10:44  冰冷的火  阅读(78)  评论(0)    收藏  举报