Я пытаюсь запустить скрипт python (createdb.py), который имеет операции DB из моего основного сценария python (app.py), но имеющий ошибка ниже.Python & SnakeSQL - raise lock.LockError ('Lock больше не действителен.') ERROR
Traceback (most recent call last):
File "C:\Python27\lib\site-packages\web\application.py", line 236, in process
return self.handle()
File "C:\Python27\lib\site-packages\web\application.py", line 227, in handle
return self._delegate(fn, self.fvars, args)
File "C:\Python27\lib\site-packages\web\application.py", line 409, in _delegate
return handle_class(cls)
File "C:\Python27\lib\site-packages\web\application.py", line 384, in handle_class
return tocall(*args)
File "D:\Python\virtualenvs\new4\textweb\bin\app.py", line 16, in GET
createdb.createTables()
File "D:\Python\virtualenvs\new4\textweb\bin\createdb.py", line 9, in createTables
cursor.execute("CREATE TABLE table (dateColumn Date, numberColumn Integer)")
File "D:\Python\virtualenvs\new4\textweb\bin\SnakeSQL\driver\base.py", line 1548, in execute
self.info = self.connection._create(parsedSQL['table'], parsedSQL['columns'], parameters)
File "D:\Python\virtualenvs\new4\textweb\bin\SnakeSQL\driver\base.py", line 993, in _create
self._insertRowInColTypes(table)
File "D:\Python\virtualenvs\new4\textweb\bin\SnakeSQL\driver\base.py", line 632, in _insertRowInColTypes
], types= ['String','String','String','Bool','Bool','Bool','Text','Text','Integer']
File "D:\Python\virtualenvs\new4\textweb\bin\SnakeSQL\driver\dbm.py", line 61, in _insertRow
self.tables[table].file[str(primaryKey)] = str(values)
File "D:\Python\virtualenvs\new4\textweb\bin\SnakeSQL\external\lockdbm.py", line 50, in __setitem__
raise lock.LockError('Lock no longer valid.')
LockError: Lock no longer valid.
Это мой код создан.
import SnakeSQL
connection = SnakeSQL.connect(database='test', autoCreate=True)
connection = SnakeSQL.connect(database='test')
cursor = connection.cursor()
def createTables():
cursor.execute("CREATE TABLE table (dateColumn Date, numberColumn Integer)")
cursor.execute("INSERT INTO table (dateColumn, numberColumn) VALUES ('2003-11-8', 3)")
cursor.execute("INSERT INTO table (dateColumn, numberColumn) VALUES ('2004-11-8', 4)")
cursor.execute("INSERT INTO table (dateColumn, numberColumn) VALUES ('2005-11-8', 5)")
cursor.execute("INSERT INTO table (dateColumn, numberColumn) VALUES ('2006-11-8', 6)")
def select():
selectResult = cursor.execute("SELECT dateColumn FROM table WHERE numberColumn = 3")
return selectResult
if __name__ == "__main__":
createTables()
и вот мой app.py код;
import web
import SnakeSQL
import createdb
render = web.template.render('templates/')
connection = SnakeSQL.connect(database='test')
cursor = connection.cursor()
urls = (
'/', 'index'
)
class index:
def GET(self):
createdb.createTables()
result = createdb.select()
return render.index(result)
if __name__ == "__main__":
app = web.application(urls, globals())
app.run()
Я не мог понять, почему у меня такая ошибка. Можете ли вы поделиться своими знаниями для решения этой проблемы?
Не использовали SnakeSql, но я не могу себе представить, что вы когда-либо захотите сделать «курсором» константу на уровне модуля. Попробуйте создать курсор (-ы) внутри ваших методов. – Gerrat
На самом деле я уже пробовал, но потом получил еще одну ошибку, так как для курсора нет глобальной константы. Вот почему я переместил его вне функции. –
Да, вам нужно либо создать курсор в каждой функции, которая его использует, либо передать в качестве параметра. (Эта часть действительно не имеет ничего общего с SnakeSQL - это просто то, как работают функции на Python, и почти все остальные языки программирования работают). – Gerrat