[零基础学python]用Python操作数据库(3)
admin
2023-07-31 01:50:06
0

通过python操作数据库的行为,除了能够完成前面两讲中的操作之外(当然,那是比较常用的),其实任何对数据库进行的操作,都能够通过python-mysqldb来实现。

建立数据库

在《用python操作数据库(1)》中,我是通过mysql>写SQL语句,建立了一个名字叫做qiwsirtest的数据库,然后用下面的方式跟这个数据库连接

>>> import MySQLdb
>>> conn = MySQLdb.connect(host=\"localhost\",user=\"root\",passwd=\"123123\",db=\"qiwsirtest\",charset=\"utf8\")

在上面的连接中,参数db=\"qiwsirtest\"其实可以省略,如果省略,就是没有跟任何具体的数据库连接,只是连接了mysql。

>>> import MySQLdb
>>> conn = MySQLdb.connect(\"localhost\",\"root\",\"123123\",port=3306,charset=\"utf8\")

这种连接没有指定具体数据库,接下来就可以用类似mysql>交互模式下的方式进行操作。

>>> conn.select_db(\"qiwsirtest\")
>>> cur = conn.cursor()
>>> cur.execute(\"select * from users\")
7L
>>> cur.fetchall()
((1L, u\'qiwsir\', u\'123123\', u\'qiwsir@gmail.com\'), (2L, u\'mypython\', u\'123456\', u\'python@gmail.com\'), (3L, u\'google\', u\'111222\', u\'g@gmail.com\'), (4L, u\'facebook\', u\'222333\', u\'f@face.book\'), (5L, u\'github\', u\'333444\', u\'git@hub.com\'), (6L, u\'docker\', u\'444555\', u\'doc@ker.com\'), (7L, u\'\\u8001\\u9f50\', u\'9988\', u\'qiwsir@gmail.com\'))

conn.select_db()选择要操作的数据库,然后通过指针就可以操作这个数据库了。其它的操作跟前两讲一样了。

如果不选数据库,而是要新建一个数据库,如何操作?

>>> cur = conn.cursor()
>>> cur.execute(\"create database newtest\")
1L

建立数据库之后,就可以选择这个数据库,然后在这个数据库中建立一个数据表。

>>> cur.execute(\"create table newusers (id int(2) primary key auto_increment, username varchar(20), age int(2), email text)\")
0L

括号里面是引号,引号里面就是创建数据表的语句,看官一定是熟悉的。这样就在newtest这个数据库中创建了一个名为newusers的表

>>> cur.execute(\"show tables\")
1L
>>> cur.fetchall()
((u\'newusers\',),)

这是查看表的方式。当然,看官可以在mysql>交互模式下查看是不是存在这个表。如下:

mysql> use newtest;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+-------------------+
| Tables_in_newtest |
+-------------------+
| newusers          |
+-------------------+
1 row in set (0.00 sec)

mysql> desc newusers;
+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| id       | int(2)      | NO   | PRI | NULL    | auto_increment |
| username | varchar(20) | YES  |     | NULL    |                |
| age      | int(2)      | YES  |     | NULL    |                |
| email    | text        | YES  |     | NULL    |                |
+----------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

以上就通过python-mysqldb实现了对数据库和表的建立。

当然,能建就能删除。看官可以自行尝试,在这里就不赘述,原理就是在cur.execute()中写SQL语句。

关闭一切

当进行完有关数据操作之后,最后要做的就是关闭游标(指针)和连接。用如下命令实现:

>>> cur.close()
>>> conn.close()

注意关闭顺序,和打开的顺序相反。

为什么要关闭?这个问题有点那个了。你把房子里面都收拾好了,如果离开房子,不关门吗?不要以为自己生活在那个理想社会。树欲静而风不止,小偷在行动。更何况,如果不关闭,服务器的内容总塞着那些东西而没有释放,早晚就满了。所以,必须关闭。必须的。

关于乱码问题

这个问题是编写web时常常困扰程序员的问题,乱码的本质来自于编码格式的设置混乱。所以,要特别提醒诸位注意。在用python-mysqldb的时候,为了放置乱码,可以做如下统一设置:

  1. Python文件设置编码 utf-8(文件前面加上 #encoding=utf-8)
  2. MySQL数据库charset=utf8(数据库的设置方法,可以网上搜索)
  3. Python连接MySQL是加上参数 charset=utf8(在前面教程中都这么演示了,很重要)
  4. 设置Python的默认编码为 utf-8 (sys.setdefaultencoding(utf-8),这个后面会讲述)

代码示例:

#encoding=utf-8

import sys
import MySQLdb

reload(sys)
sys.setdefaultencoding(\'utf-8\')

db=MySQLdb.connect(user=\'root\',charset=\'utf8\') 

MySQL的配置文件设置也必须配置成utf8 设置 MySQL 的 my.cnf 文件,在 [client]/[mysqld]部分都设置默认的字符集(通常在/etc/mysql/my.cnf):

[client] default-character-set = utf8
[mysqld] default-character-set = utf8

windows操作系统请看官自己google。


在我的网站上,有完整的本教程目录,邀请您光临,并不吝赐教: www.itdiffer.com

相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
python清除字符串里非数字... 本文实例讲述了python清除字符串里非数字字符的方法。分享给大家供大家参考。具体如下: impor...