я в настоящее время изучение transactions, и я получаю сообщение об ошибке:BadRequestError: Вложенные транзакции не поддерживаются
BadRequestError: Nested transactions are not supported
Я понятия не имею, как решить эту проблему. Любая помощь будет оценена по достоинству.
main.py
import webapp2
import jinja2
import os
import datetime
from google.appengine.ext import db
jinja_environment = jinja2.Environment(
loader=jinja2.FileSystemLoader(os.path.dirname(__file__)))
class MainPage(webapp2.RequestHandler):
def get(self):
transaction_status = create_message_txn("Python_Board", "message name", "Message Title", "Here is the message text")
message = Message.all()
template_values = {
'transaction_status': transaction_status,
'message': message,
}
template = jinja_environment.get_template('index.html')
self.response.out.write(template.render(template_values))
class MessageStore(webapp2.RequestHandler):
def post(self):
message = Message()
message.message_title = self.request.get('message_title')
message.message_text = self.request.get('message_text')
photo.put()
self.redirect('/')
class MessageBoard(db.Expando):
pass
class Message(db.Expando):
pass
def create_message_txn(board_name, message_name, message_title, message_text):
board = db.get(db.Key.from_path('MessageBoard', board_name))
if not board:
board = MessageBoard(key_name=board_name)
board.count = 0
message = Message(key_name=message_name, parent=board)
message.title = message_title
message.text = message_text
message.post_date = datetime.datetime.now()
board.count += 1
db.put([board, message])
try:
db.run_in_transaction(create_message_txn, board_name=board_name,
message_name=message_title,
message_title=message_title,
message_text=message_text)
except db.TransactionFailedError, e:
transaction_status = "Transaction failed: %s " %e
app = webapp2.WSGIApplication([('/', MainPage),
('/new_message',MessageStore)], debug=True)
index.html
<html>
<body>
<form action="/new_photo" method="post">
<label for="message_title">Message Title</label>
<div><textarea name="message_title" rows="1" cols="60" id="message_title"></textarea></div>
<label for="message_text">Message Text</label>
<div><textarea name="message_text" rows="3" cols="60" id="message_text"></textarea></div>
<input type="submit" value="Submit">
</form>
<div><hr></hr></div>
<div><b>{{ transaction_status }}</b></div>
<div><hr></hr></div>
{% for m in message(limit=5): %}
<div><b>{{ m.title }}</b></div>
<div>{{ m.text }}</div>
<div>{{ m.date }}</div>
<div><hr></hr></div>
<b>{% endfor %}</b>
</body>
</html>
+1 Спасибо за ваш ответ. Я новичок в транзакциях, я только начал изучать механизм Google App. Я взломал этот код вместе, пытаясь понять, как работают транзакции. Как я рекурсивно вызываю create_message_txn? Можете ли вы порекомендовать простой пример, показывающий транзакции в действии? – Anthony
@ Энтони Ваша ошибка не связана с транзакциями, она связана с вашим дизайном программы, транзакции хороши, потому что вся транзакция либо терпит неудачу, либо преуспеет, классический пример - банковское дело, чтобы вы могли сделать платеж кому-то, это процесс из 2 частей , снимать деньги со своего счета и кредитовать кого-то elses, для этого требуется 2 запроса. Если ваша учетная запись снята, а затем есть ошибка, вы получаете деньги, а другой человек никогда не зачисляется! 'run_in_transaction' позволяет выполнять многопроцессорные запросы, которые заполняют все части или никакие части. – dm03514
Хорошо, я попытаюсь переписать это и вернуться в ближайшее время. – Anthony