【问题标题】:Insert form fields into database (Bottle, sqlite)将表单字段插入数据库(Bottle、sqlite)
【发布时间】:2016-06-22 15:01:11
【问题描述】:

必须有更好的方法来做到这一点。我已经阅读了瓶子文档,但它并没有太大帮助。这有效,但它很脏。好像我错过了什么。

@route('/client/new', method="POST")
def add_new_client():
    c = db.cursor()
    query = """INSERT INTO Clients VALUES(NULL, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"""

    try:
        r = request.POST

        d = r['LastContact'].split('/') # mm/dd/yyyy
        try: lastcontact = datetime(int(d[2]), int(d[0]), int(d[1]))
        except Exception as e: lastcontact = datetime.now()

        try: taxExempt = r['TaxExempt'] 
        except Exception as e: taxExempt = 0

        c.execute(query, (r['FirstName'], r['LastName'], r['Address1'], r['Address2'], r['City'], r['State'], r['Zip'],
                 r['HomePhone'], r['CellPhone'], r['WorkPhone'], r['Email'], r['ContactMethod'], r['ContactTime'],
                 r['ContactFrequency'], lastcontact, taxExempt, r['TaxID'], r['Notes']))
        db.commit()
    except Exception as e:
        print "ERROR %s" % e
    redirect('/client/%d' % c.lastrowid)
    c.close()

【问题讨论】:

    标签: python sqlite bottle


    【解决方案1】:

    如果你使用SQLAlchemy ORM,事情会看起来更干净,相关文章:

    如果您希望继续混合使用 SQL 和 Python,您可以使用 命名/关键字查询占位符来简化代码,这样您只需将 r 字典传递到查询中: p>

    d = r['LastContact'].split('/') # mm/dd/yyyy
    try: 
        r['LastContact'] = datetime(int(d[2]), int(d[0]), int(d[1]))
    except Exception as e: 
        r['LastContact'] = datetime.now()
    
    if 'TaxExempt' not in r:
        r['TaxExempt'] = 0
    
    query = """
        INSERT INTO 
            Clients 
        VALUES
            (NULL, 
             :FirstName, 
             :LastName, 
             :Address1, 
             :Address2, 
             :City, 
             :State, 
             :Zip, 
             :HomePhone, 
             :CellPhone, 
             :WorkPhone,
             :Email, 
             :ContactMethod, 
             :ContactFrequency, 
             :ContactTime, 
             :LastContact, 
             :TaxExempt, 
             :TaxID, 
             :Notes)
    """
    c.execute(query, r)
    

    【讨论】:

    • 不知道它已经命名了占位符。这有助于我弄清楚如何使用 sqlalchemy。 Alchemy 似乎比 sqlite3 好得多。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2011-02-20
    • 2012-12-30
    • 1970-01-01
    • 2017-11-21
    • 2011-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多