我正在尝试编写一个类来创建一个sqlite表,因为我必须为这个赋值创建相当多的表。
这就是我试图接近的方式:
def connect_database(database_name):
table_connect = lite.connect(database_name)
print "connected successfully"
return table_connect
def create_table(name_of_table, *argument_name, *argument_type):
# create_user = user_table.cursor()
# create_user.execute("Drop table if EXISTS user_table")
# create_user.execute('create table user_table(user_id INT, user_name VARCHAR )')
# create_user.close()
table_create = name_of_table.cursor()
table_create.execute("drop table if exists name_of_table")
table_create.execute('''
create table name_of_table(
argument_name argument_type
argument_name name_of_table
)
''')
print "create table successfully"
table_create.close()
example = connect_database('example.db')
create_table(example, water, FLOAT)
我遇到的问题是无法传递多个argument_names,或者在方法中传递argument_type。
此外,该程序返回水和FLOAT的未解析参考。
无论如何我能完成这个方法吗?
由于
答案 0 :(得分:1)
你应该考虑使用像sqlalchemy这样的ORM ...根据你当前的技能水平编写你自己的数据库抽象可能是灾难的一个方法,但如果你真的必须尝试这样的东西
def create_table_string(table_name,*fields):
return "CREATE TABLE {table_name} ({fields})".format(table_name=table_name,
fields=",".join(fields))
def create_table(cursor,name_of_table, *fields):
sql = create_table_string(table_name,*fields)
print "SQL:",sql
cursor.executescript(sql)
db = sqlite3.connect(my_database)
create_table(db.cursor(),"a_table","Field1 INT","Field2 String","Field3 PRIMARY KEY INTEGER")