?这是爬行动物列的原始“ 14”
关系数据库是基于关系模型的数据库,并且关系模型通过两个维表保留,因此其存储方法是由等级组成的表。每列都是一个字段,每行都是记录。该表可以被视为某个实体的集合,并且实体之间存在连接,这需要表和表之间的关系,例如主键的关联关系。多数表构成一个数据库,即关系数据库。
有许多关系数据库,例如SQLITE,MySQL,Oracle,SQL Server,DB2等。在本节中,我们主要了解MySQL数据库的存储操作。
在Python 2中,连接MySQL的大多数库都使用mySQLDB,但是官方库不支持Python 3,因此此处的推荐库是PymySQL.IN本节,让我们解释一下使用PymySQL操作MySQL数据库的方法。
在开始之前,请确保已安装MySQL数据库,并确保它可以正常运行。有关安装,请参阅:https://setup.scrpe.center/mysql。
除了安装MySQL数据外,您还需要安装PymySQL库。如果您尚未安装PymySQL,则可以使用PIP3安装:
有关更详细的安装方法,请参阅:https://setup.scrape.cterer/pymysql
两次安装后,我们都可以开始学习本节。
在这里,我尝试首先连接数据库。支持当前的MySQL在本地运行,用户名是root,密码为123456,并且运行端口为3306。数据库称为蜘蛛,代码如下:
运行结果如下:
这是一种声明MySQL连接对象的PymySQL方法。目前,您需要传递MySQL进行运行(即IP)。由于MySQL在本地运行,它将通过。如果MySQL远程运行,则将其传递到其公共网络IP地址中。后续参数为用户名。也就是说,密码,即端口(默认3306)。
连接成功后,您需要调用MySQL操作光标的方法,并使用光标执行SQL语句。在此,我们执行两个SQL并使用方法直接执行。MySQL的当前版本,然后呼叫方法获取第一个数据,并获得版本编号。第二句SQL执行创建数据库的操作。该数据库称为蜘蛛,默认编码为UTF-8。由于语句不是查询语句,因此在直接执行执行后成功创建了数据库蜘蛛。然后使用此数据库执行后续操作。
一般而言,创建数据库的操作只需要执行一次。当然,我们还可以手动创建一个数据库。将来,我们的操作是在蜘蛛数据库上执行的。
创建数据库后,您需要在连接时指定附加参数。
接下来,创建一个新的数据表学生,然后执行创建表的SQL语句。在此指定了3个字段,结构如表4所示。
表4数据表学生
学校名称年龄的示例代码创建表如下:
运行后,我们创建了一个名为学生的数据表。
当然,为了证明,此处仅指定最简单的字段。实际上,在爬行者的过程中,我们将根据爬行结果设计特定的字段。
下一步是将数据插入数据库中。例如,在这里抓取学生信息,学校号码为20120001,名称为鲍勃,年龄为20岁。那么,如何将数据插入数据库?该示例?代码如下:
这是一个SQL语句。该值不是以串起串起的方式构造的,例如:
这种写作方式很麻烦且不直观,因此我们选择直接使用格式符号来实现它。其中有一些。我们只需要在该方法的第一个参数中传递SQL语句,最好用统一的元组传递它。这种写作的方式不仅可以避免串起缝线的麻烦,而且还可以避免引号冲突问题。
之后,值得注意的是,需要执行的方法来实现数据插入。此方法是真正将语句提交到数据库执行的方法。对于数据插入,更新和删除操作,需要调用此方法才能生效。
接下来,我们添加了异常的治疗方法。如果执行失败,请调用执行数据滚动,这相当于一无所有。
这是事务问题。交易机制可以确保数据的一致性,也就是说,此事要么发生或没有发生。例如,插入数据,在所有插入中都不会插入插入。此外,还有三个事务属性,隔离和耐用性。这些四个属性通常称为酸性特征,如表4所示。
表4-4交易属性
原子性是一个不加区分的工作单位。交易中包含的操作要么是执行或不一致的。一致性与原子关系密切相关。交易的执行不能受到其他交易的干扰,即操作中的其他交易和一项交易的数据通过并发事务隔离,并执行每个交易执行。不要互相干扰耐用性,这也被称为称为通讯是,这意味着一旦提交了交易,数据库中的数据更改应该是永久性的。其他操作或故障不应具有任何影响,更新和删除操作以更改数据库,并且更改操作必须是事务。,因此这些操作的标准写作是:
这可以确保数据的一致性。这里的方法为实现事务提供了支持。
上面插入的数据的操作是通过构造SQL语句实现的,但是很明显,存在极其不便的位置。例如,性别领域突然增加。目前,SQL语句需要更改:
需要更改相应的参数:
这显然不是我们想要的。在许多情况下,我们要实现的效果是插入方法无需更改。为了制定一般的方法,我们只需要通过动态动态词典。例如,构建这样的词典:
然后,SQL语句将根据字典动态构建,并且也会动态构造元组,以实现一般插入方法。因此,在这里,我们需要重写插入方法:
我们在此处传递的数据是字典,并将其定义为一个变量。表名称也定义为变量。接下来,您需要构造动态SQL语句。
首先,您需要构造插入的字段,并且您只需要在此处取关键名称,然后用逗号将其分开。因此,结果是,它需要将其构造为占用的地方,而几个可以构造字段。例如,这里有三个字段需要构造。在此,首先定义了长度为1的数组,然后将乘法扩展到它,然后调用该方法,然后将其命名为方法最终变成了。我们使用字符串的方法来构建表名称,字段名称和占位符。最终的SQL语句是动态的:
最后,该方法的第一个参数传递到变量中,并且可以成功地将第二个参数的键值构造函数插入数据中。
通过这种方式,我们实施了一种插入字典以插入数据的方法。无需修改SQL语句和插入操作。
数据更新操作实际上是执行SQL语句。最简单的方法是构造SQL语句,然后执行:
这是构造SQL,然后执行方法,传递元组表单的参数并执行相同方法的操作的相同方法。如果您想进行简单的数据更新,则可以使用此方法。
但是,在实际的数据捕获过程中,我们需要在大多数情况下插入数据,但是我们关心的是是否会出现重复数据。如果出现,我们想更新数据,而不是反复保存一次。加法,就像前面提到的动态构造SQL问题一样,您可以实现另一种方法。如果存在数据,请更新数据;如果数据不存在,则将插入数据。此外,此方法支持灵活的字典。该示例如下:
此处构建的SQL语句实际上是在插入该语句,但我们稍后添加。这条代码意味着如果已经存在主密钥,则执行了更新操作。例如,我们传递的数据仍然是20120001,但是年龄已更改为20到21。目前,将不插入此数据,但是将直接进行ID到20120001的数据将被更新。构建的完整SQL如下:
在这里,它已经变成6.因此,以下方法的第二个参数需要将2加倍至原始参数。
通过这种方式,我们可以在没有存在的情况下实现主要密钥的数据,以及更新数据的功能。
删除操作相对简单,只需直接使用该语句,但是您需要指定目标表名称和删除条件要删除,并且仍然需要使用的方法进行生效。该示例如下:
因为有多种类型的删除条件,因此操作符号更大,更少或等于等,并且条件的条件等等,因此不再继续复杂的判断条件。在此处传输为字符串以实现删除操作。
在讲话之后,插入,修改和删除的操作以及剩下的非常重要的操作之一是查询。查询将使用该语句,该示例如下:
运行结果如下:
在这里,我们构建了一个SQL语句,查询20岁及以上的学生,然后将其传递给方法。注意,这里没有更多方法。当前的示例是4。
然后我们调用了该方法。此方法可以获取结果的第一个数据。返回结果是元组的形式。元组元素的顺序对应于该字段,也就是说,第一个元素是第一个字段,第二个元素是第二个字段,依此类推。然后,我们再次调用该方法,它可以获取所有数据在结果中。然后打印出结果和类型,它是双重组,每个元素都是记录,我们将其遍历。
但是您需要注意这里的问题。以下是3个数据而不是4。该方法不是获取所有数据吗?这是因为其内部实现具有偏移指针指向查询结果。首先,偏移指针指向第一个数据。服用一次后,指针被抵消到下一个数据。下一个数据。我们首先调用该方法一次,因此结果的偏移指针是指下一个数据,该方法返回数据指向偏移量的数据指针直到所有数据结束为止,因此该方法只有3个结果。
此外,我们可以使用圆形方法来获取所有数据,而不是所有数据。结果将以元组的形式返回。如果数据量很大,则占用成本将很高。因此,建议使用以下方法一一接收数据:
通过这种方式,指针将转移一块数据,并且简单有效。
在本节中,我们学会了如何使用PymySQL在构造方法中操作MySQL数据库和一些SQL语句。我们将在实际战斗案例中应用这些操作以存储数据。
本节代码:https://github.com/python3webspider/mysqltest。
非常感谢您的阅读。有关更多令人兴奋的内容,请注意我的公共帐户“编码器”和“ Cui Qingcai丨Quiet”。