python - 错误请求错误 : Nested transactions are not supported

标签 python google-app-engine python-2.7 google-cloud-datastore jinja2

我目前正在学习 transactions我收到此错误消息:

BadRequestError: Nested transactions are not supported

我不知道如何解决这个问题。任何帮助将不胜感激。

ma​​in.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>

最佳答案

看起来您正在递归调用create_message_txn

def create_message_txn():

    # code happening here
    db.run_in_transaction(create_message_txn, board_name=board_name

^ run_in_transaction 调用 create_message_txn,后者调用 run_in_transaction,后者调用 ect...

您可以通过将要作为事务运行的代码分解为单独的函数来解决此问题

关于python - 错误请求错误 : Nested transactions are not supported,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15603028/

相关文章:

python - 用 C++ 加速 Python

python - 使用 np.matrix 数组的矩阵乘法和使用 np.arrays 的 dot()/tensor() 有什么区别?

php - 如何通过 PHP App Engine 应用程序在 Google Compute Engine 实例上创建 cron 作业?

python - pdb:如何显示当前行,而不是在上一个列表之后继续?

python - Twisted 应用程序中的协议(protocol)列表

python-2.7 - 将数据从 2d 转换为 3d numpy 数组

python - 如何在 PyQt4 中创建自动完成组合框?

python - scikit-learn 中分类算法的文本特征输入格式

java - 如何读取appengine内存缓存中的所有键?

java - 在多个客户域上运行 Google App Engine 应用程序