CS50 Проблема с историей финансов при выборе SQL

#sql #cs50

#sql #cs50

Вопрос:

Я не понимаю, почему я не могу ВЫБРАТЬ столбец ‘transaction’ из моего портфолио ТАБЛИЦ. Я создал ТАБЛИЦУ, используя приведенный ниже синтаксис:

 CREATE TABLE 'portfolio' ('transaction' integer primary key autoincrement, 
'datetime' datetime, user_id bigint, 'symbol' varchar(5), 'price' numeric(8, 
2), 'shares' integer, 'total' numeric(8, 2));
  

Транзакция сохраняет текущее количество ордеров на покупку / продажу. Когда у меня есть транзакция в инструкции SELECT, это выдает мне ошибку, см. Ниже:

 RuntimeError: near "transaction": syntax error [SQL: 'SELECT transaction, 
datetime, symbol, shares, price FROM portfolio WHERE user_id = 2'] 
(Background on this error at: http://sqlalche.me/e/e3q8)
  

Если я не включаю транзакцию в код Python, тогда все работает, и таблица отображается на веб-странице. Что мешает мне выбрать транзакцию? В коде я включил транзакцию.

 @app.route("/history")
@login_required
def history():
    """Show history of transactions"""
    #create table
    history = db.execute("SELECT transaction, datetime, symbol, shares, price FROM portfolio WHERE user_id = :user_id", user_id = session["user_id"])

    history_info = []
    for info in history:
        transaction = info["transaction"]
        datetime = info["datetime"]
        symbol = info["symbol"]
        shares = info["shares"]
        price = info["price"]
        total = abs(shares * price)
        history_info.append({"transaction":transaction, "datetime":datetime, "symbol":symbol, "shares":shares, "price":price, "total":total})

    return render_template("history.html", history_info = history_info)
  

Приведенный ниже HTML-это то, что будет отображаться на веб-странице. В настоящее время я прекратил транзакцию.

 {% extends "layout.html" %}

{% block title %}
    History
{% endblock %}

{% block main %}
    <table class="table table-bordered">
        <thead>
            <th>Purchase Date/Time</th>
            <th>Symbol</th>
            <th>Shares</th>
            <th>Price</th>
            <th>Total</th>
        </thead>
        <tbody>
            {% for stock in history_info %}
                <tr>
                    <td>{{ stock.datetime }}</td>
                    <td>{{ stock.symbol }}</td>
                    <td>{{ stock.shares }}</td>
                    <td>{{ stock.price }}</td>
                    <td>{{ stock.total }}</td>
                </tr>
            {% endfor %}
        </tbody>
   </table>
{% endblock %}
  

Комментарии:

1. Я бы подумал, transaction это было бы зарезервированное слово. Попробуйте заключить это в квадратные скобки [transaction] и посмотрите, работает ли это у вас.

2. Это сделало это. [транзакция] в инструкции SELECT. К сожалению, я решил выбрать зарезервированное слово в качестве имени моей переменной, но, по крайней мере, теперь я знаю. Спасибо!

Ответ №1:

Решена….

transaction это зарезервированное слово.

Попробуйте заключить это в квадратные скобки [transaction] и посмотрите, работает ли это у вас.