import pymysql
conn = pymysql.connect(host='127.0.0.1',
user='root', passwd='root', db='ypyx')
cur = conn.cursor()
cur.execute("USE ypyx")
cur.execute("SELECT * FROM posts WHERE id<100")
print(cur.fetchone())
cur.close()
conn.close()
这段程序有两个对象:连接对象(conn )和光标对象(cur )。
连接 / 光标模式是数据库编程中常用的模式,不过刚刚接触数据库的时候,有些用户很难区分两种模式的不同。连接模式除了要连接数据库之外,还要发送数据库信息,处理回滚操作(当一个查询或一组查询被中断时,数据库需要回到初始状态,一般用事务控制手段实现状态回滚),创建新的光标对象,等等。
而一个连接可以有很多个光标。一个光标跟踪一种状态 (state)信息,比如跟踪数据库的使用状态。如果你有多个数据库,且需要向所有数据库写内容,就需要多个光标来处理。光标还会包含最后一次查询执行的结果。通过调用光标函数,比如 cur.fetchone() ,可以获取查询结果。
用完光标和连接之后,千万记得把它们关闭。如果不关闭就会导致连接泄漏 (connection leak),造成一种未关闭连接现象,即连接已经不再使用,但是数据库却不能关闭,因为数据库不能确定你还要不要继续使用它。这种现象会一直耗费数据库的资源,所以用完数据库之后记得关闭连接!
刚开始的时候,你最想做的事情可能就是把采集的结果保存到数据库里。
ALTER DATABASE scraping CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
ALTER TABLE pages CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE pages CHANGE title title VARCHAR(200) CHARACTER SET utf8mb4 COLLATE
utf8mb4_unicode_ci;
ALTER TABLE pages CHANGE content content VARCHAR(10000) CHARACTER SET utf8mb4 CO
LLATE utf8mb4_unicode_ci;
这四行语句改变的内容有:数据库、数据表,以及两个字段的默认编码都从 utf8mb4 (严格说来也属于 Unicode,但是对大多数 Unicode 字符的支持都非常不好)转变成了 utf8mb4_unicode_ci 。
网友评论