【问题标题】:how to add a new column every time i run a python program每次运行python程序时如何添加新列
【发布时间】:2014-03-06 19:07:59
【问题描述】:

我希望我的表有第一列作为卷号,第二列作为名称。每当我运行 python 程序时,我想在表中添加一列日期。在那个新列中,我想填充我从中获得的列表user.list 将包含值 'P','A','P','P' 等。如何去做呢? 我尝试先通过 alter 命令添加一列,然后插入数据,但没有任何效果。

choice1=raw_input("\nEnter 'y' or 'n' to add new column:\n")
if choice1 is 'y':
    cursor.execute(" ALTER TABLE table1 ADD datecolumn varchar(20)")
    db.commit()
    for i in xrange(0,10):
        if students[i] is 'A':
            cursor.execute("insert into table1(datetime) values ('A')")
            db.commit()
        elif students[i] is 'P':
            cursor.execute("insert  into table1(datetime) values ('P')")
            db.commit()

【问题讨论】:

  • 在运行时更改数据库设计可能不是您真正想要的。你到底想完成什么?
  • 我不知道这是否是您的问题的一部分,但您不应该使用is 来检查是否相等。请改用== 运算符。

标签: python mysql mysql-python


【解决方案1】:

不要在运行时更改您的数据库设计,而是以您将更改数据而不是结构的方式进行设计。

你可以有两张桌子。一个名为Student 的列rollnoname,如果它是唯一的,可能会在rollno 上进行PK。

然后有另一个名为Thing(任何合适的名称,但我不知道你的数据是关于什么)的表,其中包含三列when(日期时间),value(任何合适的名称)(CHAR(1 )) 和student(与rollno 相同的类型)。

whenvalue 上定义PK,以确保每个学生每个日期只有一个值。定义从 Thing.studentStudent.rollno 的 FK。现在您的数据库负责保持您的数据(大部分)一致。

根据您对不同列的选择、插入和更新需求定义索引。

然后用于查询连接两个表以获得所需的结果,例如

select s.name, t.value
from Student s
left join Thing t on t.student = s.rollno
where t.when == 'whenever'

(我不确定mysql方言,所以可能需要更多引号。请随时编辑。)

【讨论】:

    猜你喜欢
    • 2021-06-27
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-12
    • 1970-01-01
    相关资源
    最近更新 更多