python数据库编程

数据库编程


##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'))


猜你喜欢

转载自blog.csdn.net/qq_41891803/article/details/80721347