Python操作MySQL:获取自增ID、时间戳与字符串转义技巧
本文介绍Python操作MySQL数据库的三个实用技巧:如何在commit前获取插入数据的自增主键ID,利用MySQL特性自动维护创建和更新时间字段,以及使用pymysql.escape_string处理含引号的字符串以避免报错。
获取插入数据的自增主键ID
在使用Python向MySQL数据库插入数据时,经常需要获取刚插入记录的自增主键ID。通过 database.insert_id() 方法可以实现这一功能,但需要注意获取时机。
关键点在于:必须在执行 commit() 之前获取主键ID。如果在提交事务之后调用该方法,将返回0。这是因为数据库在提交后可能已经处理了其他操作,导致无法直接关联到刚才的插入操作。
import pymysql
database = pymysql.connect(
host="127.0.0.1", port=3306, user="root", password="root", database="test"
)
cursor = database.cursor()
for i in range(5):
cursor.execute('insert into test (name) values ("test")')
# 必须在commit之前获取
print(database.insert_id())
database.commit()
cursor.close()
database.close()利用MySQL自动维护时间字段
MySQL数据库本身支持自动维护创建时间和更新时间字段,无需在Python代码中手动设置。这可以通过在表定义中使用 DEFAULT CURRENT_TIMESTAMP 和 ON UPDATE CURRENT_TIMESTAMP 来实现。
具体用法如下:
DEFAULT CURRENT_TIMESTAMP:表示当插入数据时,该字段默认值为当前时间。ON UPDATE CURRENT_TIMESTAMP:表示每次更新这条数据时,该字段都会自动更新为当前时间。
CREATE TABLE `test` (
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;这种方式不仅简化了代码,还确保了时间数据的准确性和一致性。
处理含引号的字符串
在使用Python插入数据库时,如果字符串包含单引号或双引号,直接执行SQL语句可能会导致报错。为了解决这个问题,可以使用 pymysql.escape_string() 方法对字符串进行转义处理。
if type(str_content) is str:
str_content = pymysql.escape_string(str_content)通过这种方式,可以有效避免因特殊字符导致的SQL语法错误,提高程序的健壮性。
其他实用操作
除了上述技巧,Python操作MySQL还有一些其他常用操作,如查询数据、处理二进制数据等。以下示例展示了如何查询数据并获取字段描述信息:
import MySQLdb as mdb
import sys
#获取数据库的链接对象
con = mdb.connect('localhost', 'root', 'root', 'test')
with con:
#获取普通的查询 cursor
cur = con.cursor()
cur.execute("SELECT * FROM Writers")
rows = cur.fetchall()
#获取连接对象的描述信息
desc = cur.description
print 'cur.description:',desc
#打印表头,就是字段名字
print "%s %3s" % (desc[0][0], desc[1][0])
for row in rows:
#打印结果
print "%2s %3s" % row此外,处理二进制数据(如图片)时,需要注意文件写入的异常处理:
import MySQLdb as mdb
import sys
try:
#连接 mysql,获取连接的对象
conn = mdb.connect('localhost', 'root', 'root', 'test');
cursor = conn.cursor()
#执行查询该图片字段的 SQL
cursor.execute("SELECT Data FROM Images LIMIT 1")
#使用二进制写文件的方法,打开一个图片文件,若不存在则自动创建
fout = open('image.png','wb')
#直接将数据如文件
fout.write(cursor.fetchone()[0])
#关闭写入的文件
fout.close()
#释放查询数据的资源
cursor.close()
conn.close()
except IOError, e:
#捕获 IO 的异常 ,主要是文件写入会发生错误
print "Error %d: %s" % (e.args[0],e.args[1])
sys.exit(1)以上就是Python操作MySQL的小技巧,更多关于Python数据库操作的技术资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









