针对python的sql语句的封装以及调用:

python的db操作类:

# -*- coding: utf-8 -*-
# coding=utf-8 import MySQLdb class Database(object): [_db_handler, _cursor] = (None, None)
def __init__(self, host=HOST, port=PORT, user='user', passwd='passwd', db_name='mydb'):
try:
self._db_handler = MySQLdb.connect(host, user, passwd, db_name)
self._cursor = self._db_handler.cursor()
except Exception, e:
print e def query(self, table, condition=None, column='*',log=""):
try:
cmd = 'SELECT %s from %s ' % (column, table)
if condition:
cmd = cmd + "WHERE %s" % condition
cmd = cmd + ';'
log.info(cmd)
self._cursor.execute('set NAMES utf8')
self._cursor.execute(cmd)
resultset = self._cursor.fetchall()
rowcount = self._cursor.rowcount
return [resultset, rowcount]
except:
log.error("Error: unable to fecth data") def execute(self, command, parameters,log):
try:
cmd = command % parameters
cmd = cmd + ';'
log.info(cmd)
self._cursor.execute('set NAMES utf8')
rowcount = self._cursor.execute(cmd)
self._db_handler.commit()
return rowcount
except Exception, e:
log.error('error:%s' % str(e))
log.error('execute db error,rollback')
self._cursor.rollback() def batchMysqlOpr(self, sqldata, rsdb):
try:
for item in range(len(sqldata)):
rs = self.query(sqldata[item][1], sqldata[item][2], column=sqldata[item][3])
rsdb.setdefault(sqldata[item][0], rs)
except Exception, e:
print e
return def singleMysqlOpr(self,key,command,paramters,rsdb):
try:
rowcount = self.execute(command, paramters)
if key:
rsdb.setdefault(key, rowcount)
return rowcount
except Exception, e:
print e
return if __name__ == '__main__':
pass

通过以上代码进行具体操作的时候,比如insert操作,如果我的表中第一个字段是自增的,需要insert into biao(ziduan1, ziduan2, ziduan3) values(value1, value2, value3) ,把具体字段写清楚,而不能直接通过insert into biao values(ziduan1, ziduan2, ziduan3)的这种方式来调用

并且,在调用的时候,如果插入的内容是string类型的,则sql的命令需要按照:

sql_command = 'insert into a (ziduan1, ziduan2, ziduan3) values("%s", "%s", "%s")'

#注意sql的命令行语句本身就是str型的,通过''括起来的,values里面的%s就需要通过""双引号括起来,如果外面是双引号,则里面的%s就写成单引号,能区分开就可以

parameters = (string_bianliang1, stringbianliang2, string_bianliang3)

之后进行db.execute(sql_command, paramters),才可以正常运行

这里已经踩过坑了,一定要注意~~~

【python-sql】sql操作时遇到的坑的更多相关文章

  1. Python文本文件读写操作时的字符编码问题

    说明:文本文件的字符编码问题只存在t模式中,如:open('a.txt', mode='rt') 编码(encode): 我们输入的任何字符想要以文件(如.txt)的形式保存在计算机的硬盘上, 必须先 ...

  2. R和python连接SQL sever 数据库操作

    在R的使用中,为了方便提取数据, 我们经常要进行数据库进行操作,接下来我们尝试使用R进行连接数据. 这里我们使用R中的RODBC进行操作, 首先,我们需要先配置ODBC资源管理器 通过任务管理器或者w ...

  3. python模拟SQL语句操作文件

    1.需求 在文本界面输入SQL语句,查询相应的数据,例如输入下面的语句 print(''' 支持大小写的SQL语句查询,大写或者小写都可以 1. select * from db1.emp 2. se ...

  4. web实践小项目<一>:简单日程管理系统(涉及html/css,javascript,python,sql,日期处理)

    暑假自学了些html/css,javascript和python,苦于学完无处练手几乎过目即忘...最后在同学的建议下做了个简单日程管理系统.借第一版完成之际,希望能将实践期间犯过的错误和获得的新知进 ...

  5. python 连接sql server

    linux 下pymssql模块的安装 所需压缩包:pymssql-2.1.0.tar.bz2freetds-patched.tar.gz 安装: tar -xvf pymssql-2.1.0.tar ...

  6. Python和SQL Server 2017的强大功能

    Python和SQL Server 2017的强大功能 摘要: 源:https://www.red-gate.com/simple-talk/sql/sql-development/power-pyt ...

  7. Python和SQL 2017的强大功能

    Python和SQL Server 2017的强大功能   原文来自:https://www.red-gate.com/simple-talk/sql/sql-development/power-py ...

  8. Django中使用mysql数据库并使用原生sql语句操作

    Django自身默认使用sqlite3这个轻量级的数据库,但是当我们开发网站时,sqlite3就没有mysql好,sqlite3适合一些手机上开发使用的数据库. 准备的软件mysql数据库,版本5.7 ...

  9. HIVE的sql语句操作

    Hive 是基于Hadoop 构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在hadoop 分布式文件系统中的数据,可以将结构 化的数据文件映射为一张数据库表,并提供完整的SQL查 ...

随机推荐

  1. Image Base64 Datasnap Image delphi与c#互相兼容识别

    delphi用,不能与java.c#互相识别. procedure TServerMethods.UpdateDoc(ItemID : integer; doc : TStream); delphi用 ...

  2. ubuntu防火墙命令初探

    1.防火墙的状态与开关 1)$sudo ufw status  //查看防火墙的状态及当前的设置规则 2)$sudo ufw enable //开启防火墙 3)$sudo ufw disable // ...

  3. php & 变量引用、函数引用、对象引用

    变量的引用        PHP 的引用允许你用两个变量来指向同一个内容 <?php $a="ABC"; $b =&$a; echo $a;//这里输出:ABC ec ...

  4. 机器学习进阶-图像梯度计算-scharr算子与laplacian算子(拉普拉斯) 1.cv2.Scharr(使用scharr算子进行计算) 2.cv2.laplician(使用拉普拉斯算子进行计算)

    1. cv2.Scharr(src,ddepth, dx, dy), 使用Scharr算子进行计算 参数说明:src表示输入的图片,ddepth表示图片的深度,通常使用-1, 这里使用cv2.CV_6 ...

  5. android除去标题栏或全屏

    想要除去标题栏只要加上下面两句代码在Activity的onCreate方法中即可(要在setContentView之前添加). requestWindowFeature(Window.FEATURE_ ...

  6. jq动画分析

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. ConcurrentModificationException原因及排除

    如何产生,一边遍历一边修改元素,产生iter后再修改原结构,如下,无论是for中或iter都会产生ConcurrentModificationException import java.util.Ar ...

  8. postman 请求种添加用户权限

    1. 打开postman, 在Tests输入以下内容: var jsonData =JSON.parse(responseBody);//获取body中返回的所有参数 postman.setGloba ...

  9. apache-php

    1.安装apache https://www.cnblogs.com/lxlb/p/9159056.html 2.安装php https://www.cnblogs.com/37yan/p/68794 ...

  10. 在WINDOWS上开发IOS应用的方法

    1,虚拟机上安装MAC系统,里面装XCODE 2,WINDOWS上安装code blocks,这个IDE可以直接在WIN上编译XCODE工程: 最新的IOS在windows环境下编译环境搭建记录