相关疑难解决方法(0)

在with-block之外使用with语句定义的变量?

请考虑以下示例:

with open('a.txt') as f:
    pass
# Is f supposed to be defined here?
Run Code Online (Sandbox Code Playgroud)

我已经阅读了with语句和PEP-343的语言文档(2.7),但据我所知,他们在这个问题上没有说什么.

在CPython 2.6.5 f中似乎确实在with-block之外定义,但我宁愿不依赖可能改变的实现细节.

python

81
推荐指数
4
解决办法
2万
查看次数

在python中使用带有"WITH"关键字的sqlite3

我正在做一个教程并遇到一种方法来处理与sqlite3的连接,然后我研究了关键字并发现它是一个替代尝试,除了,最后的做事方式

有人说,在文件处理的情况下,'WITH'会自动处理文件关闭,我认为与zetcode教程中所说的连接类似: -

"使用with关键字,Python解释器会自动释放资源.它还提供错误处理." http://zetcode.com/db/sqlitepythontutorial/

所以我认为使用这种处理方式会很好,但我无法弄清楚为什么两个(内部范围和外部范围)语句都有效?不应该WITH释放连接?

import sqlite3

con = sqlite3.connect('test.db')

with con:    
    cur = con.cursor()    

    cur.execute('SELECT 1,SQLITE_VERSION()')
    data = cur.fetchone()   
    print data        

cur.execute('SELECT 2,SQLITE_VERSION()')
data = cur.fetchone()
print data
Run Code Online (Sandbox Code Playgroud)

哪个输出

(1, u'3.6.21')
(2, u'3.6.21')
Run Code Online (Sandbox Code Playgroud)

我不知道WITH在这里做了什么(或者一般情况下),所以,如果你愿意,请详细说明在这种情况下使用WITH over TRY CATCH.

是否应该在每次查询时打开和关闭连接?(我在一个函数内部构造查询,我每次都用一个参数调用)这是一个好习惯吗?

python sqlite python-2.7

11
推荐指数
3
解决办法
9129
查看次数

如何知道哪个进程负责“ OperationalError:数据库已锁定”?

我有时会偶然遇到:

OperationalError:数据库已锁定

在更新SQLite数据库的过程中,但是我发现很难重现该错误:

  • 没有其他进程同时插入/删除行
  • 只有一个进程可以SELECT在此处和那里执行一些只读查询(等),但是没有提交

我已经读过OperationalError:数据库已锁定

问题:是否有办法在发生此错误时记录哪个其他进程ID负责锁定?

更一般而言,如何调试OperationalError: database is locked

python database sqlite

6
推荐指数
2
解决办法
792
查看次数

Python Sqlite3 - 数据不会永久保存

我在SQLite3Python 3上做错了.也许我误解了SQLite数据库的概念,但我希望,即使在关闭应用程序之后,数据也会存储在数据库中?当我插入数据并重新打开应用程序时,插入消失,数据库为空.

这是我的小数据库:

import sqlite3

def createTable():
    conn.execute('''CREATE TABLE VideoFile
           (ID INTEGER PRIMARY KEY NULL,
           FileName           TEXT    NOT NULL,
           FilePath           TEXT    NOT NULL,
           numOfFrames            INT     NOT NULL,
           FPS            INT     NOT NULL,
           Tags           TEXT    NOT NULL,
           Voting         REAL);''')


def insert():
    conn.execute("INSERT INTO VideoFile (Filename, FilePath, numOfFrames,FPS, Tags, Voting) \
                              VALUES ('ARCAM_0010_100', 'Categories/Dirt/Small', 2340, 50, 'Bock', 1 )");
    conn.execute("INSERT INTO VideoFile (Filename, FilePath, numOfFrames,FPS, Tags, Voting) \
                              VALUES ('ARCAM_0010_100', 'Categories/Dirt/Small', 2340, 50, 'Bock', 1 )");

def printAll(cursor):   
    cursor …
Run Code Online (Sandbox Code Playgroud)

python sqlite

4
推荐指数
1
解决办法
3584
查看次数

我应该为每个Sqlite3事务调用connect()和close()吗?

我想编写一个Python模块来抽象出我的应用程序的数据库事务.我的问题是我是否需要打电话connect()close()每笔交易?在代码中:

import sqlite3

# Can I put connect() here?
conn = sqlite3.connect('db.py')

def insert(args):
    # Or should I put it here?
    conn = sqlite3.connect('db.py')
    # Perform the transaction.
    c = conn.cursor()
    c.execute(''' insert args ''')
    conn.commit()
    # Do I close the connection here?
    conn.close()

# Or can I close the connection whenever the application restarts (ideally, very rarely)
conn.close()
Run Code Online (Sandbox Code Playgroud)

我对数据库的经验不多,所以我很欣赏为什么一种方法优于另一种方法的解释.

python sqlite

2
推荐指数
2
解决办法
970
查看次数

标签 统计

python ×5

sqlite ×4

database ×1

python-2.7 ×1