数据库编程
##1.mariadb安装与使用
[root@server0 ~]# yum install mariadb-server -y
[root@server0 ~]# systemctl start mariadb
[root@server0 ~]# mysql_secure_installation
[root@server0 ~]# mysql -uroot -pwestos
数据库基本操作
[root@server0 ~]# mysql -uroot -pwestos
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 12
MariaDB [(none)]> show databases;
+-----------------------+
| Database |
+-----------------------+
| information_schema |
| mysql |
| performance_schema |
+-----------------------+
3 rows in set (0.00 sec)
MariaDB [(none)]> create database westos;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> use westos;
Database changed
MariaDB [westos]> show tables;
Empty set (0.00 sec)
MariaDB [westos]> create table userinfo( username varchar(10), password varchar(10));
Query OK, 0 rows affected (0.16 sec)
MariaDB [westos]> desc userinfo;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| username | varchar(10) | YES | | NULL | |
| password | varchar(10) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
MariaDB [westos]> insert into userinfo values("user1", "123");
Query OK, 1 row affected (0.02 sec)
MariaDB [westos]> select * from userinfo;
+-----------+-----------+
| username | password |
+-----------+-----------+
| user1 | 123 |
+-----------+-----------+
1 row in set (0.00 sec)
MariaDB [westos]> insert into userinfo values("程序员1", "123");
Query OK, 1 row affected, 1 warning (0.02 sec)
MariaDB [westos]> select * from userinfo;
+-----------+-----------+
| username | password |
+-----------+-----------+
| user1 | 123 |
| ???1 | 123 |
+-----------+-----------+
2 rows in set (0.00 sec)
MariaDB [westos]> update userinfo set password="345" where username="user1";
Query OK, 1 row affected (0.02 sec)
Rows matched: 1 Changed: 1 Warnings: 0
MariaDB [westos]> select * from userinfo;
+----------+----------+
| username | password |
+----------+----------+
| user1 | 345 |
| ???1 | 123 |
+----------+----------+
2 rows in set (0.00 sec)
MariaDB [westos]> delete from userinfo where username="user1";
Query OK, 1 row affected (0.06 sec)
MariaDB [westos]> select * from userinfo;
+----------+----------+
| username | password |
+----------+----------+
| ???1 | 123 |
+----------+----------+
1 row in set (0.00 sec)
MariaDB [westos]> drop table userinfo;
Query OK, 0 rows affected (0.04 sec)
MariaDB [westos]> drop database westos;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> show databases;
+-----------------------+
| Database |
+-----------------------+
| information_schema |
| mysql |
| performance_schema |
+-----------------------+
3 rows in set (0.01 sec)
MariaDB [(none)]> quit
##2.mariadb中文编码问题
当使用mysql数据库时,作为纯正的爱国者(实质是英语看不懂),当然会使用中文存储一些数据,但是默认情况下存储的中文是 ?????? 这种外星文文字,这是要搞什么?
因此如何修改数据库中的编码格式设置呢?
数据库编码格式的查看
-登陆数据库
$ mysql -uroot -p
-通过下面命令查看mysql的编码格式;
MariaDB [(none)]> show variables like 'character_set_%';
+---------------------------+-----------------------------+
| Variable_name | Value |
+---------------------------+-----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+---------------------------+------------------------------+
临时修改数据库的编码格式
-修改除了character_set_filesystem之外的其他变量的编码格式为utf8;
MariaDB [(none)]> set character_set_server='utf8';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> set character_set_database = 'utf8';
Query OK, 0 rows affected (0.00 sec)
但是,很坑的是,当重启服务后,刚才的设置就直接失效,也是挺崩溃的;大招在下面.永久修改数据库的编码格式配置mysql的配置文件,配置文件在/etc/my.cnf.d/目录,设置编码格式:
第一个文件修改: /etc/my.cnf.d/client.cnf
7 [client]
8 default-character-set=utf8
第二个文件修改: /etc/my.cnf.d/server.cnf
11 # this is only for the mysqld standalone daemon
12 [mysqld]
13 character-set-server=utf8
上面设置完成,看似很完美,但是重启mariadb服务后,character_set_database并没有进行修改,因此,为了一步到位,直接设置character_set_database编码格式为utf8,如下:
MariaDB [(none)]> set character_set_database = 'utf8';
Query OK, 0 rows affected (0.00 sec)
一切ok,终于搞定!
##3.多条语句执行
In [2]: import MySQLdb as mysql
In [4]: conn = mysql.connect(user='root', passwd='westos', db='users', charset='utf8')
In [5]: cur = conn.cursor()
# 方法一: 多次执行,但效率低;
In [6]: cur.execute('insert into userinfo values("user1", "123");')
Out[6]: 1L
In [7]: cur.execute('insert into userinfo values("user2", "123");')
Out[7]: 1L
# 方法二: 选择传入变量, 然后for循环执行;
In [11]: sqli = 'insert into userinfo values("%s", "%s");' %("user3","123")
In [12]: cur.execute(sqli)
Out[12]: 1L
# 方法三: executemany方法, 直接传入列表, 实现数据多行添加;
In [13]: li = [("user1", "wdwef"), ("user2", "124213"), ("user3", "defergf")]
In [14]: sqli = 'insert into userinfo values("%s", "%s");'
In [15]: for i in li:
...: cur.execute(sqli, i)
...:
In [17]: cur.executemany(sqli, li)
Out[17]: 3L
##4.查看表内容查看表内容
# 1. fetchone()查看一条信息, 指针向后移动;
In [26]: cur.execute('select * from userinfo where username="user1";')
Out[26]: 5L
In [27]: cur.fetchone()
Out[27]: (u'user1', u'123')
In [28]: cur.fetchone()
Out[28]: (u'user1', u'123')
In [29]: cur.fetchone()
Out[29]: (u'user1', u'123')
In [30]: cur.fetchone()
Out[30]: (u'user1', u'123')
In [31]: cur.fetchone()
Out[31]: (u'user1', u'123')
In [32]: cur.fetchone()
# 2. scroll()移动指针;
In [41]: cur.scroll(0, 'absolute')
In [42]: cur.fetchone()
Out[42]: (u'user1', u'123')
# 3. fetchmany(n)显示n条信息
In [49]: cur.fetchmany(3)
Out[49]:
((u'user1', u'123'),
(u'user1', u'123'),
(u'user1', u'123'))
# 4. fetchall()显示所有信息
In [49]: cur.fetchall()
Out[49]:((u'user1', u'123'),
(u'user1', u'123'),
(u'user1', u'123'),
(u'user1', u'123'),
(u'user1', u'123'))