python mysql判断表是否存在_关于sql:如何检查Python中是否存在表?

我目前正在修读网页设计课程。 我想要做的是检查我的数据库中是否存在名为portafolio的表,如果不是,我想创建一个。

我正在使用Python(flask)和sqlite3来管理我的数据库。

到目前为止,我在SQL中的一些逻辑创建一个表,如果它不存在:

# db is my database variable

db.execute('''create table if not exists portafolio(id INTEGER PRIMARY KEY AUTOINCREMENT,

stock TEXT,

shares INTEGER,

price FLOAT(2),

date TEXT

''');

但是我不想使用SQL命令,而是想知道如何在Python中进行完全相同的检查,因为它看起来会更清晰。

任何帮助,将不胜感激。

不确定哪种方式更干净,但您可以发出简单的选择并处理异常:

try:

cursor.execute("SELECT 1 FROM portafolio LIMIT 1;")

exists = True

except sqlite3.OperationalError as e:

message = e.args[0]

if message.startswith("no such table"):

print("Table 'portafolio' does not exist")

exists = False

else:

raise

请注意,这里我们必须检查它是什么类型的OperationalError,并且我们必须在字符串检查中使用这个"不漂亮"的消息子字符串,因为目前无法获取实际的错误代码。

或者,更具SQLite特定的方法:

table_name ="portafolio"

cursor.execute("""

SELECT name

FROM sqlite_master

WHERE type='table' AND name=?;

""", (table_name, ))

exists = bool(cursor.fetchone())

nit用于异常解决方案。如果原因不是因为表存在,则可以引发OperationalError。例如,查询可能有语法问题,它仍然符合OperationalError的条件。您可能需要更深入地了解更具体的异常,以确切地找出原因。

@idjaw是的,好的一点,正在考虑这个,我会看看我是否能得到实际的错误代码。谢谢。

一个快速的问题是cursor与OP上的db变量相同?或者它是一个不同的功能(如果是,我是否需要导入随附的模块)?

@alecxe :(根据这一点,本来有帮助的错误代码不会暴露。最好也不理想的赌注,就是在字符串中找一些像"不存在"的匹配。

@idjaw是的,添加了丑陋的消息检查..

@alecxe哈。我的评论出现在您的编辑中。大。 :)

@ tadm123看起来像db是你的情况下的游标实例。在我的情况下,我将cursor初始化为cursor = db.cursor(),其中db = sqlite3.connect(':memory:')

我非常感谢,我会尝试实现这段代码

如果您正在寻找数据库操作的整洁工作,我建议您了解有关ORM(对象关系模型)的更多信息。

我将Flask与SQLAlchemy一起使用。 您可以使用python类来管理SQL操作,如下所示:

class Portafolio(db.Model):

id = db.Column(db.Integer, primary_key=True)

stock = db.Column(db.String(255), unique=True)

shares = db.Column(db.Integer, unique=True)

它可以轻松完成所有数据库检查和迁移。

是的,我对它有点了解并且它更容易但是我正在经历的在线课程告诉你用SQL做这件事,非常乏味......

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值