python 语句如何操作SQL语句

Python 在使用MySQLdb执行语句时,格式化SQL语句中字符串的问题
在Python使用MySQLdb的executemany一次插入多行
#下面的table_name为传进来的表名
#insert_values为插入的值列表
cur.executemany(&insert into %s values (%s,%s,%s)& %(table_name),insert_values)
但是这个语句有一个问题,会报错:提示格式化字符串时值不足,因为只提供了table_name,python把values后面的三个占位%s也考虑进来了,
请问有什么办法绕过这个问题?
答案:cur.executemany(&insert into %s values (%%s,%%s,%%s)& %(table_name),insert_values)Python Django直接执行sql语句_Linux编程_Linux公社-Linux系统门户网站
你好,游客
Python Django直接执行sql语句
来源:Linux社区&
作者:iloveyin
Django提供两种方式执行(performing)原始的SQL查询:
(1)&、&:执行原始查询并返回模型实例
(2)&、&Executing custom SQL directly&:直接执行自定义SQL,这种方式可以完全避免数据模型,而是直接执行原始的SQL语句。
三、raw()方法
The&raw()&manager method can be used to perform raw SQL queries that return model instances:&Manager.&raw&(&raw_query&,&params=None&,&translations=None&)
&&& for p in Person.objects.raw('SELECT * FROM Person LIMIT 2'):
John Smith
Jane Jones
&注意,原始SQL里的model,如果在&没有定义,则使用app的名称,后面下划线 后面接模型类的名称,如"Myblog_New";上面的例子,在定义类的时候已经这样处理了:
Class New(models.Model):
class Meta:
db_table = 'New'
&2、查询字段隐射到模型字段(Mapping query fields to model fields)
raw()&automatically maps fields in the query to fields on the model.并且是通过名称来匹配,这意味着我们可以使用SQL子句(clause)
&&& Person.objects.raw('''SELECT first AS first_name,
last AS last_name,
bd AS birth_date,
FROM some_other_table''')
&返回一个RawQuerySet对象
3、索引查找(Index lookups)
first_person = Person.objects.raw('SELECT * from myapp_person')[0]
first_person = Person.objects.raw('SELECT * from myapp_person LIMIT 1')[0]
#然而,索引和切片不是在数据库级别上执行(除LIMIT外)
4、延迟模型字段(Deferring model fields)
Fields may also be left out(left out:忽视,不考虑;被遗忘),这意味着该字段的查询将会被排除在根据需要时的加载。
&&& for p in Person.objects.raw('SELECT id, first_name FROM myapp_person'):
print p.first_name,
print p.last_name
John Smith
Jane Jones
&这个例子其实检索了三个字段,一个主键(必需)、一个原始SQL字段、一个需求字段。这里主键字段不能省略,否则会出错,如下:&
5、传递参数(Passing parameters into&raw()&)
如果需要执行参数化查询,您可以使用params参数原始()&
注意两点:&(1)、
(2)、必须使用[参数],否则出错:&& & & & & & & & (3)、这种方式不对:
&&& query = 'SELECT * FROM myapp_person WHERE last_name = %s' % lname
&&& Person.objects.raw(query)
&四、直接执行自定义SQL
远远不够,可直接执行自定义SQL,directly execute&UPDATE&,&INSERT&, or&DELETE&queries.
django.db.connection:代表默认的数据库连接&django.db.transaction&:代表默认数据库事务(transaction)&用database connection调用&connection.cursor()&得到一个游标(cursor)对象。&然后调用&cursor.execute(sql,&[params])&执行SQL&cursor.fetchone()&或者&cursor.fetchall():&返回结果行
如果执行修改操作,则调用&<mit_unless_managed()来保证你的更改提交到数据库。
def my_custom_sql():
from django.db import connection, transaction
cursor = connection.cursor()
cursor.execute("UPDATE bar SET foo = 1 WHERE baz = %s", [self.baz])
mit_unless_managed()
cursor.execute("SELECT foo FROM bar WHERE baz = %s", [self.baz])
row = cursor.fetchone()
return row
& django.db.connections&:针对使用多个数据库
from django.db import connections
cursor = connections['my_db_alias'].cursor()
# Your code here...
mit_unless_managed(using='my_db_alias')
&通常我们不需要手动调用&<mit_unless_managed(&),我们可以这样做:
@commit_on_success
def my_custom_sql_view(request, value):
from django.db import connection, transaction
cursor = connection.cursor()
cursor.execute("UPDATE bar SET foo = 1 WHERE baz = %s", [value])
transaction.set_dirty()
cursor.execute("SELECT foo FROM bar WHERE baz = %s", [value])
row = cursor.fetchone()
return render_to_response('template.html', {'row': row})
connection.queries
下面关于Python的文章您也可能喜欢,不妨看看:
Python:在指定目录下查找满足条件的文件&
Python2.7.7源码分析&
无需操作系统直接运行 Python 代码&
上源码安装Python3.4&
《Python核心编程 第二版》.(Wesley J. Chun ).[高清PDF中文版]
《Python开发技术详解》.( 周伟,宗杰).[高清PDF扫描版+随书视频+代码]
Python脚本获取Linux系统信息
在下用Python搭建桌面算法交易研究环境
Python 语言的发展简史
Python 的详细介绍:Python 的下载地址:
本文永久更新链接地址:
相关资讯 & & &
& (08/09/:46)
& (09/27/:35)
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款博客访问: 6157670
博文数量: 997
注册时间:
ITPUB论坛APP
ITPUB论坛APP
APP发帖 享双倍积分
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: Linux
前面文章 《》《》介绍了基本使用,本文介绍一下使用python 对oracle 数据库进行常见操作的介绍oracle@rac3:/home/oracle/python>cat sqlops.py&#!/usr/bin/python# -*- coding: utf-8 -*-&import cx_Oracleimport sysimport urllibimport os# function #def conndb(dbname='yangdb',username='yang',pwd='yang'):##创建数据库连接,设置默认值 &&& &if dbname == 'yangdb':& & & & username = "yang"&& & & & pwd = "yang"&& & & & dsn=cx_Oracle.makedsn('127.0.0.1','1523','yangdb')& & & & db=cx_Oracle.connect(username,pwd,dsn)& &return dbdef SelectDB(db,sql):##select 查询& & cursor = db.cursor()&& & cursor.execute(sql)& & result=cursor.fetchall()& & cursor.close()& & return result& &&def DMLDB_N(db,sql):##插入,更新,删除& &cursor = db.cursor()& &cursor.execute(sql)& &cursor.close()& &mit()def DMLDB_P(db,sql,para):##插入,更新,删除& &cursor = db.cursor()& &cursor.execute(sql,para)& &cursor.close()& &mit()def DDLDB(db,sql):#DDL 语句& &cursor=db.cursor()& &cursor.execute(sql)& &cursor.close()def printResult(rs):& &for row in rs:&& & & & print row&print "============== 连接数据库 =================="db=conndb()print "===============创建表 pytb=================="ddl='create table pytab(id number,val varchar2(20))'DDLDB(db,ddl)sel='select * from pytab'rs=SelectDB(db,sel)printResult(rs)print "===============向pytb插入数据==============="inst='insert into pytab values(0,\'dba\')'DMLDB_N(db,inst)sel='select * from pytab'rs=SelectDB(db,sel)printResult(rs)print "=======使用参数,向pytb插入数据============="dt=[{'id':1,'val':'qilong'},& & {'id':2,'val':'xxq'}, &&& & {'id':3,'val':'aliyun'}, & && & {'id':4,'val':'aliyundba'}, &&& & {'id':5,'val':'aliyunsa'},& & {'id':6,'val':'aliyunidc'},& & {'id':7,'val':'aliyunnework'},& & {'id':8,'val':'alibaba'},& & {'id':9,'val':'taobao'}, & && & {'id':10,'val':'alipay'},& & {'id':11,'val':'tech'},& & {'id':12,'val':'oracle'},& & {'id':13,'val':'IBM'} & && &]inst='insert into pytab values(:id,:val)'for bulk in dt:& &DMLDB_P(db,inst,bulk)sel='select * from pytab'rs=SelectDB(db,sel)printResult(rs)print "===============删除表 pytb 数据=============="delt='delete from pytab where id=1'DMLDB_N(db,delt)print "===============查询表 pytb 数据=============="sel='select * from pytab'rs=SelectDB(db,sel)printResult(rs)结果显示:oracle@rac3:/home/oracle/python>python sqlops.py&============== 连接数据库 =================================创建表 pytb=================================向pytb插入数据===============(0, 'dba')=======使用参数,向pytb插入数据=============(0, 'dba')(1, 'qilong')(2, 'xxq')(3, 'aliyun')(4, 'aliyundba')(5, 'aliyunsa')(6, 'aliyunidc')(7, 'aliyunnework')(8, 'alibaba')(9, 'taobao')(10, 'alipay')(11, 'tech')(12, 'oracle')(13, 'IBM')===============删除表 pytb 数据=============================查询表 pytb 数据==============(0, 'dba')(2, 'xxq')(3, 'aliyun')(4, 'aliyundba')(5, 'aliyunsa')(6, 'aliyunidc')(7, 'aliyunnework')(8, 'alibaba')(9, 'taobao')(10, 'alipay')(11, 'tech')(12, 'oracle')(13, 'IBM')
阅读(13793) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。}

我要回帖

更多关于 python 语句 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信