zoukankan      html  css  js  c++  java
  • orm与mysql

    一. orm执行原生sql语句

      在模型查询API不够用的情况下,我们还可以使用原始的SQL语句进行查询。

      Django 提供两种方法使用原始SQL进行查询:一种是使用raw()方法,进行原始SQL查询并返回模型实例;另一种是完全避开模型层,直接执行自定义的SQL语句。

      1. 执行原生sql查询

      raw()管理器方法用于原始的SQL查询,并返回模型的实例:

      注意:raw()语法查询必须包含主键。

      这个方法执行原始的SQL查询,并返回一个django.db.models.query.RawQuerySet 实例。 这个RawQuerySet 实例可以像一般的QuerySet那样,通过迭代来提供对象实例

    raw()管理器方法用于原始的SQL查询,并返回模型的实例
        
        ret = models.Book.objects.raw('select * from app01_book')
        
        print(ret)
            # <RawQuerySet: select * from app01_book>
            
        for i in ret:
            print(i.id, i.title, i.commentNum)
    
        原生SQL还可以使用参数,注意不要自己使用字符串格式化拼接SQL语句,防止SQL注入
        
        d = {'commentNum': 'cn'}
        
        ret = models.Book.objects.raw('select * from app01_book where id > %s', translations=d, params=[2,])
        
        for i in ret:
            print(i.id, i.title, i.cn)
    View Code

      2. 直接执行自定义sql

      有时候raw()方法并不十分好用,很多情况下我们不需要将查询结果映射成模型,或者我们需要执行DELETE、 INSERT以及UPDATE操作。在这些情况下,我们可以直接访问数据库,完全避开模型层。

      我们可以直接从django提供的接口中获取数据库连接,然后像使用pymysql模块一样操作数据库

    from django.db import connection, connections
        
        cursor = connection.cursor()
        
        sql = 'select * from app01_book'
        
        cursor.execute(sql)
        
        ret = cursor.fetchone()
    
        print(ret)
    View Code

    二.  Python脚本中调用Django环境(django外部脚本使用models)

    if __name__ == '__main__':
        import os
        os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'manytable.settings')
        import django
        django.setup()
    
        from app01 import models
        books = models.Book.objects.all()
        print(books)
    View Code
  • 相关阅读:
    iPhone控件之UIWebView2
    Xcode 4.1/4.2 免证书(iDP)开发+真机调试
    iPhone控件之UIToolbar
    POJ 2472 ||SDUT 2358 106 miles to Chicago(Dijkstra算法变形)
    POJ 2418 Hardwood Species(二叉排序树)
    POJ 2513 Colored Sticks(字典树 + 并查集 + 欧拉回路)
    HDU 4033 Regular Polygon(几何 + 二分)
    POJ 3191 The Moronic Cowmpouter(二进制的变形)
    POJ 2442 Sequence(堆的应用)
    HDU 4036 Rolling Hongshu(数学+物理应用)
  • 原文地址:https://www.cnblogs.com/guyannanfei/p/10473506.html
Copyright © 2011-2022 走看看