使用python for mysql 完成简单插入操作

387 阅读6分钟

使用mysql 完成简单插入操作

通过 Python 将数据插入 MySQL 依赖于了解 MySQL 本身中的数据插入。计算语言的要求需要使用尽可能少的单词来做任何事情。理想情况下,应该只有一个词,因为Python的禅宗如下:

  • There should be one-and preferably only one-obvious way to do it.

为了检索,我们使用了 SELECT 命令。为了将数据放入数据库,我们使用 INSERT.

MySQL需要这样的规范:

INSERT INTO far VALUES("everything");

这可能是可以为MySQL制作的最基本的插入语句。从中可以看出,MySQL 的 INSERT 语句的基本语法如下:

INSERT INTO <some table> (<some column names>) VALUES("<some values>");

现在让我们把这个语句的骨架拆开,看看MySQL与我们可能在英语中使用的内容相比如何。

INSERT

现在应该很清楚,使用INSERT是为了快捷。除了MySQL程序员使用它之外,这个词没有什么特别之处。

它更容易记住,更接近于整个英语的标准,并且比 sTIcK 更好地反映所调用的操作。

您可能知道,put 目前在其他编程语言中用于大致相同的功能(例如,PHP、C C++中的 fputs)。因此,如果MySQL程序员将数据库系统编码为使用该词而不是INSERT,则关键字可能是PAPAYA(当然,系统的可用性在这一点上会急剧下降)。重要的是我们使用系统所需的词来做我们想要的行动。

值得注意的是,还有一个关键字 REPLACE 可用于将数据放入MySQL数据库。

使用与 INSERT 大致相同的语法:

REPLACE INTO <some table> SET("<some column name>" = "<some value>") ;

由于它是与 SELECT 类比形成的,因此我们不会讨论 REPLACE 太多。

INTO

在很多方面,MySQL数据库像邮局管理员一样处理插入。只要盒子存在,它就会将邮件放在您告诉它的任何地方。因此,如果我们要告诉MySQL插入某些内容,则必须告诉它某些东西必须去哪里。为此,我们使用补充关键字INTO。这是对命令插入和替换的自然补充。

如果你是计算机编程的新手,让计算机做某事似乎仍然是合理的。但计算机最终只是机器,速度极快,非常愚蠢。除非他们明确地,否则他们不会煞费苦心地告诉程序员如何推理。除非被告知如何猜测,否则他们无法猜测。

在现代计算的早期,1970 年代和 1980 年代初,程序员会用首字母缩略词 GIGO-garbage in, garbage out 来描述这种计算动态。如果你作为程序员不告诉它该做什么,它就不知道该怎么做。

Table name

Python 通过为许多常见功能提供高级句柄来帮助完成此过程,MySQL将数据粘贴的地方就是其中之一。

如果你告诉MySQL正确的位置来放置信息,一切都很好

但是如果MySQL不知道如何处理您的数据,它将抛出错误

Column names

在语句的这一部分中,您向 MySQL 指示稍后在语句中传递值的顺序。这些处理方式与变量名称类似,因此不会在单引号或双引号中设置。

必须在此处和语句的 value 部分中确定数据库解决的列名由的性质。

假设我们有以下数据集:

image.png

出于说明性原因,此数据集的定义故意较差。

image.png

因此,唯一需要的值“that cannot be left blank”是 id 的值,即主键。这已由系统设置,因为它会自动递增。因此,我们可以摆脱以下陈述:

mysq1> insert into menu(name) values("shark");

您会注意到我们省略了价格列的值。效果是它现在设置为 NULL 值:

image.png

空值本身并不坏。所有的计算都是数据和代码,但代码和数据都必须由程序员控制,以影响所需的受控结果。否则,错误肯定会随着异常而蔓延,结果将是安全性和有效性的妥协。

程序执行所依赖的任何数据都应该是必需的。如果这是一个企业级数据库,您可能希望关闭此漏洞,因此将以不同的方式定义表。您可能希望为尽可能多的列要求非 NULL 值,以确保数据库的安全性和可维护性。

VALUES

有两个关键字可用于在 INSERT 语句中引入此时要插入的数据:VALUEVALUES。任何一个都是正确的;两者都可以与单个值或多个值一起使用。

插入的值的数量与关键字的数量方面之间需要一致。

VALUES("<some values>", "<some more values>", "<some other values>");

对 MySQL 来说与以下相同:

VALUE("<some values>", "<some more values>", "<some other values>");

就像 INSERT 语句的以下两个短语是相同的:

VALUE ("<some values>");
VALUES("<some values>");

这个关键字插槽所做的只是引入括号中的值。<some values>

VALUES 关键字后面的值必须以与列名相同的顺序显示。否则,MySQL将尝试将数据放置在错误的位置。如果不验证传递给 MySQL 的数据的完整性,数据很快就会失控。请考虑此语句对表的影响。

mysq1> INSERT INTO menu(name, price) VALUES("13.00", "shark"); 

由于列名的顺序和值的顺序不一致,此语句告诉MySQL插入具有以下值的字段名称和价格:

name=13.00

price=shark

问题是表的定义不允许这些值:

image.png

字段名称应为三十个字符的字符串。字段价格应该是一个十进制值,小数点左侧最多六个数字,右侧最多两个数字。那么,当两者混为一谈到完全混乱的地步时会发生什么呢?灾难。

image.png

我们得到了一条叫13.00的鱼,它不花钱!值 13.00 可以是一个 varchar 字符串,由 MySQL 解释。但是,在这种情况下,鲨鱼不能被解释为十进制值。

值得注意的是,鲨鱼不能是十进制值的原因是因为它没有这样定义。通过用双引号传递它,我们指示它是一个值,而不是变量名称。但是,如果我们之前将变量 shark 定义为十进制值,那么我们可以相应地使用它。

这样的定义可以在MySQL或Python中完成。在 Python 中,我们将使用一个简单的变量赋值语句:

shark=13.00

这将被 Python 截断为 13。00,但它仍然会保持数据类型的完整性(要插入 13 . 00,我们在创建表时需要对列使用 DECIMAL 类型)。第二个零以后可以使用格式约定回收。

在MySQL中,我们将使用SET命令。


本文正在参加「金石计划 . 瓜分6万现金大奖」