Python sqlite的一些问题
2013-09-12 20:16
267 查看
写在前面
1、为什么要写这篇文章?由于经常被bhq鄙视,不思考问题,所以向他说明其实我每天都在思考。2、本文用的python版本是3.x,为什么,原因很简单,因为在3.x里面,print是一个函数,必须要加括号。
connection和cursor之间的关系
他们之间的关系其实很简单, cursor = connection.cursor()其实我真正想说的是,这两个类都有execute, executemany, executescript等一系列函数,那么这些函数之间的关系是什么呢?拿execute函数为例,文档上面是这么描述connection的execute函数的:
This is a nonstandard shortcut that creates an intermediate cursor object by calling the cursor method, then calls the cursor’s execute method with the parameters given.
意思就是说,这个函数实际上内部就是调用了connection.cursor函数,获得一个cursor对象,然后调用这个cursor的execute函数。那么具体情况如何呢?其实我们可以参看以下pypy的源码,看看他的connection.cursor函数的实现,地址在此。
代码如下:
def execute(self, *args): self._check_closed() cur = Cursor(self) if self.row_factory is not None: cur.row_factory = self.row_factory return cur.execute(*args)
原来这个函数还返回一个cursor对象,这点文档里面倒是没有提到啊。
对于其他函数的具体细节,也可以参考pypy的实现。
建立测试数据库,代码如下:
conn = sqlite3.connect("test.db") sql = 'create table user(name TEXT, age INTEGER)' conn.execute(sql)
关于autocommit的一些讨论
1、默认是自动commit的吗?
测试代码:conn = sqlite3.connect("test.db") sql = 'insert into user values(?, ?)' conn.execute(sql, ('name', 25))
通过查询数据库,发现数据并没有插入到数据库,这就说明,插入一条数据的时候,确实需要调用connection的commit方法
2、这个是不是自动commit?
测试代码:conn = sqlite3.connect("test.db") sql = 'insert into user values(?, ?)' conn.execute(sql, ('name', 25))
sql = 'select * from user'
cursor = conn.execute(sql)
for row in cursor:
print(row)
输出:
('name', 25)
看样子,好像数据已经commit进了数据库,但是通过sqlite shell,执行select * from user,发现数据库里面还是空的。
综上得出结论,除非调用connection的commit函数,否则数据并不会持久化。
相关文章推荐
- PYTHON自学笔记3包含一些出错问题
- python list倒序输出中的一些问题
- boost::python 遇到的一些问题总结
- Python数值问题的一些问题
- python中将函数赋值给变量时需要注意的一些问题
- python编码的一些问题
- 今天python遇到的一些问题小结
- python进程池加线程池的一些问题
- [Python]sqlite3二进制文件存储问题(BLOB)(You must not use 8-bit bytestrings unless you use a text_factory...)
- Python—pip的一些小问题__PermissionError: [Errno 13]
- ubuntu上用python安装扩展包遇到的一些问题
- Python使用MySQLdb时的一些问题解决
- python一些问题
- Python中使用装饰器时需要注意的一些问题
- ubuntun16.04 +cuda8.0+cudnn5+opencv2.3+python+caffe安装过程中出现的一些问题
- 关于 Python 入门的一些问题?
- 关于Script.NET Python开发包的一些问题解答
- Linux下的python 配置项目环境遇到的一些问题
- 服务器配置python时一些问题的处理方法
- 解决Linux安装Python相关包的_sqlite3.so及sqlite3相关问题