python - 将表单字段插入数据库(Bottle、sqlite)

标签 python sqlite bottle

必须有更好的方法来做到这一点..我已经阅读了 Bottle 文档,但它并没有多大帮助。这可行,但很脏。好像我错过了一些东西。

@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()

最佳答案

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

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

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)

关于python - 将表单字段插入数据库(Bottle、sqlite),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35871228/

相关文章:

python - 将 Bottle FORMSDICT 转换为 Python 字典(以线程安全的方式)

python - Bottle.py 使用 file.save() 引发 ValueError ('I/O operation on closed file' ,)

python - .PY 转换为 .EXE Python 2.6

javascript - SQL查询多个不相关的表

python - 在python中将数据从文件导入到字典

android - 如何在没有数据库锁的情况下并行执行线程并将相应的数据插入sqlite数据库?

c# - System.Data.SQLite 执行Query时出现 "No such Table"错误

python - 从 virtualenv 中启动 wsgi 应用程序作为 Linux 系统服务

python - 用Python编写Excel文件

python - 使用Python打开网页