我有一个python dbsetup.py
程序设置我的数据库中的表,然后我运行一些程序
查询和更新数据库。
我面临的问题是:
问题是,当我更改文件的架构时,我再次运行dbsetup.py
。(是的,它会转储
旧桌子,但它可以从新鲜开始)。但每当我这样做时,dbsetup.py
偶尔会挂起。不仅如此,当我在我的数据库上发出mysql命令时它会挂起,即mysql
光标只是一直闪烁,命令没有完成。我无法解决问题。
每次我必须创建一个新的数据库然后我甚至无法丢弃旧的数据库。这就是我db.setup.py
的样子:
from settings import *
import MySQLdb as db
conn = db.connect(MYSQL_HOST,MYSQL_USER,MYSQL_PASS,MYSQL_DB)
cursor = conn.cursor()
try:
cursor.execute("drop table OJapp_users")
except:
pass
try:
cursor.execute("drop table submission")
except:
pass
try:
cursor.execute("drop table testcases")
except:
pass
try:
cursor.execute("drop table problems")
except:
pass
cursor.execute("create table problems (pid VARCHAR(255) PRIMARY KEY NOT NULL, score INT NOT NULL,checker VARCHAR(255) NOT NULL)")
cursor.execute("create table testcases (tid INT AUTO_INCREMENT PRIMARY KEY NOT NULL,inputfile VARCHAR(255) NOT NULL,ouputfile VARCHAR(255) NOT NULL,score INT NOT NULL,memory INT NOT NULL,time INT NOT NULL,pid VARCHAR(255) NOT NULL,FOREIGN KEY (pid) REFERENCES problems(pid))")
cursor.execute("create table OJapp_users (id INT AUTO_INCREMENT PRIMARY KEY NOT NULL, username VARCHAR(255) NOT NULL, password VARCHAR(255), name VARCHAR(255), email VARCHAR(255) UNIQUE, college VARCHAR(255), country VARCHAR(255))")
cursor.execute("create table submission (sid INT PRIMARY KEY AUTO_INCREMENT,username VARCHAR(255), problemid VARCHAR(32), language VARCHAR(16), count INT, time TIMESTAMP, status VARCHAR(255) default 'Queued...', program blob, score INT default 0,FOREIGN KEY (problemid) REFERENCES problems(pid))")
cursor.close()
conn.commit()
conn.close()
知道为什么会这样吗?
对数据库的resrt的查询工作正常。此查询在我的数据库上的其他表上工作正常。仅select * from submission
submission
表的查询不起作用。
是因为它是我数据库中当前唯一的动态表,它还将程序存储为blobs
,这会占用太多内存(但我只插入了大约7条记录)。
想不通