数据库编程基本操作
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()
相关文章推荐
- 数据库基本操作和JDBC编程步骤
- Android通讯录数据库介绍与基本操作(增删改查)
- 为什么编程会那么麻烦?.net中数据库的操作是否有高效编程的方式?
- JDBC-数据库的更新操作编程(三)
- SQL SERVER 对数据库的一些基本操作:创建、更改、查看、删除……
- 数据库基本操作和知识
- 数据库基本操作
- vb sql server创建数据库实现增、删、改、查等基本操作
- C#网络编程(基本概念和操作) - Part.1
- OpenCV 编程简介(矩阵/图像/视频的基本读写操作)
- Android 联系人数据库介绍以及对联系人的基本操作
- C#网络编程(基本概念和操作) - Part.1
- 【转】数据库基本知识:(四)数据操作-删和改
- 数据库MySQL的基本操作
- Android开发笔记(十四)数据库操作的基本方法
- Oracle数据库基本操作(四) —— PLSQL编程
- 数据库开发基本操作-provider: 命名管道提供程序, error:provider: 命名管道提供程序, error:40
- ADO 操作数据库(二)--基本对象Connection,Command和Recordset
- MySQL : 数据库和表的基本操作总结
- Spring Boot实战之Rest接口开发及数据库基本操作