您的位置:首页 > 数据库

数据库编程基本操作

2018-03-31 17:03 211 查看

安装mariadb安装与使用,具体的安装,数据库的初始化看以前的MYSQL篇

[root@server0 ~]# yum
install mariadb-server -y
[root@server0 ~]# systemctl
start mariadb
[root@server0 ~]# mysql_secure_installation
[root@server0 ~]# mysql -uroot -pwestos


看到这安装成功

[root@foundation51 tmp]# rpm -qa | grep mariadb
mariadb-5.5.44-2.el7.x86_64
mariadb-libs-5.5.44-2.el7.x86_64
mariadb-server-5.5.44-2.el7.x86_64


mysql_secure_installation 初始化完成后登陆

查看数据库编码格式

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/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

MariaDB [(none)]>


latin1百度百科

Latin1是ISO-8859-1的别名,有些环境下写作Latin-1。ISO-8859-1编码是单字节编码,向下兼容ASCII,其编码范围是0x00-0xFF,0x00-0x7F之间完全和ASCII一致,0x80-0x9F之间是控制字符,0xA0-0xFF之间是文字符号。
ISO-8859-1收录的字符除ASCII收录的字符外,还包括西欧语言、希腊语、泰语、阿拉伯语、希伯来语对应的文字符号。欧元符号出现的比较晚,没有被收录在ISO-8859-1当中。
因为ISO-8859-1编码范围使用了单字节内的所有空间,在支持ISO-8859-1的系统中传输和存储其他任何编码的字节流都不会被抛弃。换言之,把其他任何编码的字节流当作ISO-8859-1编码看待都没有问题。这是个很重要的特性,MySQL数据库默认编码是Latin1就是利用了这个特性。ASCII编码是一个7位的容器,ISO-8859-1编码是一个8位的容器。


再数据库westos中的linux表中插入user1和密码可以,但是插入中文时出现问题了 :‘用户2‘变成了‘??2‘

MariaDB [westos]> insert into linux value('user1','123');
Query OK, 1 row affected (0.07 sec)

MariaDB [westos]> select * from linux;
+----------+----------+
| username | password |
+----------+----------+
| user1    | 123      |
+----------+----------+
1 row in set (0.00 sec)

MariaDB [westos]> insert into linux value('用户2','234');
Query OK, 1 row affected, 1 warning (0.07 sec)

MariaDB [westos]> select * from linux;
+----------+----------+
| username | password |
+----------+----------+
| user1    | 123      |
| ??2      | 234      |
+----------+----------+
2 rows in set (0.00 sec)

MariaDB [westos]>


淋湿修改编码格式:set character_set_database=’utf8’ ;set character_set_server=’utf8’;

MariaDB [westos]> 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/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

MariaDB [westos]> set character_set_database='utf8';
Query OK, 0 rows affected (0.00 sec)

MariaDB [westos]> set character_set_server='utf8';
Query OK, 0 rows affected (0.00 sec)

MariaDB [westos]> show variables like 'character_set_%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)


此时在数据库westos中的中文输入都会时乱码,重新建立数据库user

create database user;
进入该数据库
use user;
创建表useinfo
create table useinfo(id int(16) not null,name varchar(10) not null);
插入数据
insert into useinfo value('001','老李');
查看插入数据

MariaDB [user]> select * from useinfo;
+----+--------+
| id | name   |
+----+--------+
|  1 | 老李   |
+----+--------+
1 row in set (0.00 sec)


当退出数据库重新进入时,林时修改的编码方式又会恢复回去,永久修改需要修改文件/etc/my.cnf.d/client.cnf 和server.cnf

配置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
上面设置完成,看似很完美,但是重启mari
fc56
adb服务后,character_set_database并没有进行修
改,因此,为了一步到位,直接设置character_set_database编码格式为utf8,如下:
MariaDB [(none)]> set character_set_database = 'utf8';
Query OK, 0 rows affected (0.00 sec)


重启后进入数据库查看

MariaDB [(none)]> show variables like 'character_set_%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| info               |
| mysql              |
| performance_schema |
| user               |
| westos             |
+--------------------+
6 rows in set (0.08 sec)
##ok修改完毕


数据库编程

1.连接数据库 mysql.connect后的括号内分别是数据库登陆的用户,密码登陆方式,本地登陆,数据库wetsos1,编码方式utf-8

conn = mysql.connect(user=’root’, passwd=’westos’,host=’localhost’,db=’westos01’, charset=’utf8’)

[root@foundation51 my.cnf.d]# yum search python | grep -i mysql
MySQL-python.x86_64 : An interface to MySQL
[root@foundation51 my.cnf.d]# yum install MySQL-python.x86_64


ipython中导入MySQLdb模块 ,如果感觉大小写麻烦,可以统一转小写

import MySQLdb
或
import MySQLdb as mysql
import MySQLdb as mysql
conn =mysql.connect(user='root',passwd='redhat',host='localhost',db='user',charset='utf8')
print conn  ##测试是否连接数据user成功
---->>
<_mysql.connection open to 'localhost' at 2068ed0>


2.创建游标,给数据发送sql语句

import MySQLdb as mysql
conn =mysql.connect(user='root',passwd='redhat',host='localhost',db='user',charset='utf8')
print conn
cur = conn.cursor()
print cu
--->>>
<_mysql.connection open to 'localhost' at 22fded0>
<MySQLdb.cursors.Cursor object at 0x7fcf8259f850>


3.对于数据操作insert, update, create, delete, drop

实验前先看下数据库信息

MariaDB [(none)]> show databases;  ##查看所有数据库
+--------------------+
| Database           |
+--------------------+
| information_schema |
| info               |
| mysql              |
| performance_schema |
| user               |
| westos             |
+--------------------+
6 rows in set (0.00 sec)

MariaDB [(none)]> use user;  ##进入到user该数据库
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
MariaDB [user]> show tables;   ##查看该数据的所有表,只有useinfo一个表
+----------------+
| Tables_in_user |
+----------------+
| useinfo        |
+----------------+
1 row in set (0.00 sec)

MariaDB [user]> select * from  useinfo;  ##查看user数据库中的useinfo表中的数据
+----+--------+
| id | name   |
+----+--------+
|  1 | 老李   |
+----+--------+
1 row in set (0.02 sec)

MariaDB [user]>


在user数据中创建新表python

import MySQLdb as mysql
conn =mysql.connect(user='root',passwd='redhat',host='localhost',db='user',charset='utf8')
print conn
cur = conn.cursor()
print cur
cur.execute('create table python(Name varchar(10) not null,Class int(4) not null);')


到shell进入数据库查看是否被创立,查看结构

python表被创立出来了,结构符合python中执行的语句

MariaDB [user]> show tables;
+----------------+
| Tables_in_user |
+----------------+
| python         |
| useinfo        |
+----------------+
2 rows in set (0.00 sec)
MariaDB [user]> desc python;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| Name  | varchar(10) | NO   |     | NULL    |       |
| Class | int(4)      | NO   |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

MariaDB [user]>


当然在python中也可以显示数据库中的表,前提要把创建表的命令注释,否则报错,python数据库已经存在,打印出来的时2,表示有两个表



建立数据库PY

import MySQLdb as mysql
conn =mysql.connect(user='root',passwd='redhat',host='localhost',charset='utf8')
cur = conn.cursor()
cur.execute('create database PY;')




shell中查看,PY数据库被建立

MariaDB [user]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| PY                 |
| info               |
| mysql              |
| performance_schema |
| user               |
| westos             |
+--------------------+
7 rows in set (0.00 sec)


往PY数据库中插入goods表,包括商品名称,商品价格,以及数量



shell中查看

MariaDB [PY]> show tables;
+--------------+
| Tables_in_PY |
+--------------+
| goods        |
+--------------+
1 row in set (0.00 sec)

MariaDB [PY]> desc goods;
+--------------+-------------+------+-----+---------+-------+
| Field        | Type        | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| 商品名称     | varchar(10) | NO   |     | NULL    |       |
| 商品单价     | float       | NO   |     | NULL    |       |
| 商品数量     | int(8)      | NO   |     | NULL    |       |
+--------------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)


删除数据库westos

import MySQLdb as mysql
conn =mysql.connect(user='root',passwd='redhat',host='localhost',charset='utf8')
print conn
cur = conn.cursor()
cur.execute('use PY;')
cur.execute('drop database westos;')




shell中查看



*****一定不要忘记了下边两各操作

4. 关闭游标

cur.close()

5. 关闭连接

conn.close()

一.多条语句的执行(方法1)

操作前先看下数据库,user数据库中的python表为空



import MySQLdb as mysql
conn = mysql.connect(user='root',passwd='redhat',host='localhost',db='user',port=3306,charset='utf8')
cur=conn.cursor()
li=[('user1',1),('user2',2),('user3',3)]
for Name,Class in li:
inser_sqli='insert into python values("%s","%s");'
print inser_sqli %(Name,Class)
cur.execute(inser_sqli %(Name,Class))
conn.commit()
cur.close()
conn.close()




回shell数据库查看



方法二

import MySQLdb as mysql
conn = mysql.connect(user='root',passwd='redhat',host='localhost',db='user',port=3306,charset='utf8')
cur=conn.cursor()
li=[('user11',1),('user12',2),('user13',3)]
inser_sqli='insert into python values(%s,%s);'
cur.executemany(inser_sqli,li)
conn.commit()
cur.close()
conn.close()




查看



二.数据库信息的查看

一条信息的查看cur.fetchone()

import MySQLdb as mysql
conn = mysql.connect(user='root',passwd='redhat',host='localhost',db='user',port=3306,charset='utf8')
cur=conn.cursor()
cur.execute('show tables;')
print cur.fetchone()
conn.commit()
cur.close()
conn.close()
--->>
(u'python',)


以元组形式返回两条数据信息cur.fetchmany(2)

import MySQLdb as mysql
conn = mysql.connect(user='root',passwd='redhat',host='localhost',db='user',port=3306,charset='utf8')
cur=conn.cursor()
cur.execute('show tables;')
print cur.fetchmany(2)
conn.commit()
cur.close()
conn.close()
---->>
((u'python',), (u'useinfo',))


显示所有信息cur.fetchall()

import MySQLdb as mysql
conn = mysql.connect(user='root',passwd='redhat',host='localhost',db='user',port=3306,charset='utf8')
cur=conn.cursor()
cur.execute('show tables;')
print cur.fetchall()
conn.commit()
cur.close()
conn.close()
--->>
((u'python',), (u'useinfo',))


移动游标指针cur.scroll(参数1,参数2)

import MySQLdb as mysql
conn = mysql.connect(user='root',passwd='redhat',host='localhost',db='user',port=3306,charset='utf8')
cur=conn.cursor()
cur.execute('show tables;')
print cur.fetchone()  ##当查看第一条信息后,指针已经偏移,所以下边的查看所有信息(表)只会显示第二各表以后的表,这里有两个表
# cur.scroll(0,'absolute')
print cur.fetchall()
conn.commit()
cur.close()
conn.close()
--->>
(u'python',)
((u'useinfo',),)


这样:

import MySQLdb as mysql
conn = mysql.connect(user='root',passwd='redhat',host='localhost',db='user',port=3306,charset='utf8')
cur=conn.cursor()
cur.execute('show tables;')
print cur.fetchone()
cur.scroll(0,'absolute') ##上一条查询完,修改指针到0就是第一条信息那里
print cur.fetchall()
conn.commit()
cur.close()
conn.close()
--->>
(u'python',)
((u'python',), (u'useinfo',))




conn连接数据的过程中如果没有指定使用那个数据库后边要说明

import MySQLdb as mysql
conn = mysql.connect(user='root',passwd='redhat',host='localhost',
port=3306,charset='utf8')
cur=conn.cursor()
cur.execute('use user;')  ##使用user数据库
cur.execute('show tables;')
print cur.fetchone()
#cur.scroll(0,'absolute')  ##指针的修改
print cur.fetchall()
conn.commit()
cur.close()
conn.close()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据库 编程