Python2.7 Sqlite3 2输入

2024-05-17 08:09:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写一个小的python脚本,如下所示:

#!/usr/bin/env python

from sqlite3 import dbapi2 as sqlite
from sys import argv,exit

db_name = "hashez.db"

def define_db():
    try:
        conn = sqlite.connect(db_name)
    except IOError as e:
        print "problem while creating/connecting the db:",e.args[0]
        exit(1)

    return conn

def write_db(conn,cursor,na,ha):
    conn.execute("CREATE TABLE IF NOT EXISTS user (name TEXT UNIQUE, hash TEXT UNIQUE)")
    query = "INSERT OR REPLACE INTO user VALUES($name,$hash)"
    cursor.execute(query,[na],[ha])
    cursor.close()  
    conn.commit()
    conn.close()
    exit(0)

if __name__ == "__main__":
    if len(argv) == 2:
        na,ha = argv[1]
        #ha = argv[2]
    else:
        print "no argument given - stopping now"
        exit(1)

    conn = define_db()
    cursor = conn.cursor()
    write_db(conn,cursor,na,ha)

我没有问题,当我尝试在一个输入

python user.py blah

但当我尝试处理多个时,它会进入else循环。你知道吗

我在哪里犯错?请引导我穿过。。。你知道吗


Tags: namefromimportdbsqlitedefasexit
2条回答

sys.argv中的第一个元素是脚本的名称,因此实际上您可能希望if语句包含以下内容:

if len(argv) == 3:
    na = argv[1]
    ha = argv[2]

出现此错误是因为第一个参数实际上是文件名。你知道吗

一个简单的测试文件显示了其工作原理:

[~]$ cat test.py
from sys import argv

if __name__ == '__main__':
    print argv
    print len(argv)
[~]$ python test.py one two
['test.py', 'one', 'two']
3
[~]$ python test.py one
['test.py', 'one']
2

您还应该修复SQL/查询

query = "INSERT OR REPLACE INTO user VALUES(?,?)"
cursor.execute(query,[na,ha])
conn.commit()

参见sqlite api docs。你知道吗

相关问题 更多 >