您的位置:新葡亰496net > 奥门新萄京娱乐场 > 新葡亰496netpython数据库编制程序,MYSQL常用简易语

新葡亰496netpython数据库编制程序,MYSQL常用简易语

发布时间:2019-09-08 01:22编辑:奥门新萄京娱乐场浏览(117)

    大纲

    数据库的基本操作

    函数属性&对象方法

    连接数据库

    一楼的ORM技术(sqlalchemy)

     

    python数据库编程,

    1、CREATE创建
    创建数据库:
      CREATE DATABASE [ if NOT EXISTS] 名称 [CHARACTER SET 编码格式] [COLLATE 比较方式];
    创建表:
      CREATE TABLE [IF NOT EXISTS] 名称 (字段名称 数据类型,……) [CHARACTER SET 编码格式] [COLLATE 比较方式];

    1.连接MySQL数据库

    MYSQL常用简单语句,mysql语句

    使用SQL语法大写,增加可读性(小写部分就是自己数据库写的表/字段喽,具体你懂得...)。

    创建数据库:CREATE DATABASE mysql_db;
    删除数据库:DROP DATABASE mysql_db;
    查看数据库:SHOW DATABASES;
    使用数据库:USE mysql_db;
    查看数据库中的表:SHOW TABLES;

    创建表:
    CREATE TABLE user(
    id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(20) UNIQUE NOT NULL,
    sex ENUM('1','2','3') NOT NULL DEFAULT 3
    );
    查看表结构:①SELECT COLUMN FROM user;
          ②DESC user;

    查看表创建语句(可查看各种自动生成的名字):SHOW CREATE TABLE user;
    插入表记录:
    ①INSERT INTO user(id,username,sex) VALUES(1,'Tom',1);
    ②INSERT user(username) VALUES ('John');
    查找表:SELECT * FROM user;
    删除表中的数据(保留表结构):TRUNCATE TABLE user;
    将查询结果写入新表:
    INSERT [INTO] privinces(sex) SELECT sex FROM user GROUP BY sex;

    (若表中有数据,请不要随意更改表名、列名)
    修改表名:
    ①ALTER TABLE user RENAME [AS|TO] users;
    ②RENAME TABLE user TO users;
    添加单列:
    ALTER TABLE user
     ADD [COLUMN] age SMALLINT NOT NULL UNSIGNED DEFUALT 18
     [FIRST | AFTER sex];
    删除列:ALTER TABLE user DROP sex[,DROP age];
    修改列名称和定义:
    ALTER TABLE user
     CHANGE [COLUMN] age a_ge TINYINT NOT NULL UNSIGNED AFTER id;

    单表更新:UPDATE user SET age = age 5,sex = 1 [WHERE id = 2];
    单表删除:DELETE FROM user [WHERE id =3];
    单(多)表连接:
    SELECT p.userid,p.username FROM user AS p LEFT JOIN user AS s
     ON p.userid = s.age;
    单(多)表删除:
    DELETE * FROM user [AS] u1 LEFT JOIN (
     SELECT p.userid FROM user AS p LEFT JOIN user AS s
     ON p.userid =s.age GROUP BY p.userid HAVING COUNT(s.age)>1 ) [AS] u2
     ON u1.userid = u2.age
    WHERE u1.userid > u2.userid;

    查找记录:
    SELETE select_expr [,select_expr]
     [
     FROM table_references
     [WHERE where_condition]
     [GROUP BY {col_新葡亰496netpython数据库编制程序,MYSQL常用简易语句。name|position}[ASC|DESC],...] //查询结果分组
     [HAVING where_condition] //设置分组条件
     [ORDER BY {col_name|expr|position}[ASC|DESC]] //对结果排序
     LIMIT {[offset,]row_count|row_count OFFSET offset}]//限制记录数量
    新葡亰496net, ]

    记录为2、3行:SELECT * FROM user LIMIT 1,2;

    别名使用(在项目中一般都使用别名)AS alias_name:
      SELECT id AS uid FROM user AS u ;

    子查询:
    SELECT AVG(age) FROM user WHERE userid =
     [ALL|SOME|ANY|[NOT] IN|[NOT] EXISTS](SELECT uid FROM privinces WHERE pname = '河南');

    外键约束:
    (父表为user表,必须先在父表中插入数据,才能在子表中插入数据)
    CASEADE:从父表中删除或更新行 且 自动级联删除或更新子表中匹配的行;
    SET NULL:从父表删除或更新行,并设置子表中的外键列为NULL;
    RESTRICT:拒绝对父表的更新或删除操作;
    CREATE TABLE privinces(
      pid SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
      pname VARCHAR(20) NOT NULL ,
      uid SMALLINT,
      FOREIGN KEY (uid) REFERENCES user (id)    //privinces的字段uid与user表的字段id外键约束
    ON DELETE CASEADE   //删除时 级联删除
    );

    增加主键、唯一、外键约束:
    ALTER TABLE privinces
      ADD [CONSTRAINT uq_pname] UNIQUE(pname);
    添加/删除默认约束:
    ALTER TABLE privinces
      ALTER pname {SET DEFAULT literal | DROP DEFAULT}; 
    删除主键约束:
    ALTER TABLE privinces DROP PRIMARY KEY;
    删除唯一(索引)约束:
         (查看约束名字key_name: SHOW INDEXS FROM privinces;)
    ALTER TABLE privinces DROP {INDEX | KEY} 约束名;
    删除外键约束:
         (查看约束名字:SHOW CREATE TABLE privinces;)
    ALTER TABLE privinces DROP FOREIGN KEY 约束名;

    多表更新:
    UPDATE 表的参照关系 SET col_name = {[expr | value]};

    表的参照关系:
    tab1_reference {[INNER|CROSS] JOIN |{LEFT|RIGHT}[OUTER] JOIN} tab2_refenence ON conditional_expr;
    内连接:INNER JOIN
    左外连接:LEFT JOIN
    右外连接:ROGHT JOIN
    UPDATE user INNER JOIN privinces ON user_privince = pname
      SET user_privince = pid;//(更新user内连接privince,条件是 user_privince.=pname,设置user_privince=pid)

    创建数据表的同时将查询结果写入数据表:
    CREATE TABLE table_name
      [create_definition, ...]   //创建语句的定义
      select_statement;   //要插入查询结果的 查询语句

    字符函数:
    CONCAT()字符连接;CONCAT('I','LOVE','YOU');
    CONCAT_WS()使用指定的分隔符进行字符连接;
    CONCAT_WS('|','A','B');第一个为分割符
    FORMAT();数字格式化;
    FORMAT(99999.99,1);将数字格式化,并保留1位小数
    LOWER();转换成小写字符
    UPPER();转换成大写字符
    LEFT();获取左侧字符
    RIGHT();获取右侧字符
    LENGTH();获取字符长度;
    LTRIN();删除前导字符;
    RTRIM();删除后续字符
    TRIM();删除前导、后续字符;
    SUBSTRING();字符串的截取;
    SUBSTRING('MYSQL',1,2);从第一位中截取2位;(mysql不允许为负值)
    [NOT] LIKE;模式匹配
    SELECT * FROM user WHERE username LIKE '%1%%' ESCAPE '1';
    REPLACE();替换字符串中的字符
    REPLACE('M??Y??SQL','?','*');将M??Y??SQL中的?替换成*;

    数值运算符:
    CEIL();进一去整;
    DIV;整数除法;
    FLOOR();舍一去整;
    MOD;取余数(模);
    POWER();幂运算;
    ROUND();四舍五入;ROUND(3.562,1);取一位小数
    TRUNCATE();数字截取;TRUNCATE(125.89,1);小数后截取一位;

    日期时间:
    NOW();当前时间;
    CURDATE();当前日期;
    CURTIME();当前时间;
    DATE_ADD();日期变化;
    DATE_ADD('2015-6-23',INTERVAL 365 DAY);
    DATEDIFF();俩日期之间的差值;
    DATE_FORMAT();进行日期格式化;
    SELECT DATE_FORMAT('2015-6-26','%m/%d/%Y');

    使用SQL语法大写,增加可读性(小写部分就是自己数据库写的表/字段喽,具体你懂得...)。 创建数据库:CREATE...

    数据库的基本操作

    创建数据库:

    CREATE DATABASE test;

    GRANT ALL ON test.* to user(s);

    第一行创建了一个名为“test”的数据库,假设你是数据库的管理员,第二行语句可以为指定用户(或所有用户)提升权限

    使用数据库

    USE test;

    如果你已经登录一个数据库系统,但是还没有选择你希望使用的数据库,这条简单的语句可以让你指定一个数据库,用来执行数据库操作。

    删除数据库

    DROP DATABASE test;

    这条简单的语句可以从数据库中移除所有表和数据,并将其从系统中删除。

    创建表

    CREATE TABLE users (login VARCHAR(8), userid INT, projid INT);

    这条语句创建一个新表,其中包含字符串列login,以及两个整型列:userid和projid。

    删除表

    DROP TABLE users;

    这条简单的语句可以删除数据库中的一个表,并清空其中的所有数据。

    插入行

    INSERT INTO users VALUES('leanna',2111,1);

    可以使用INSERT语句向数据库中插入一个新行。需要指定表名以及其中每列的值。对于本例而言,字符串“leanna”对应于login参数,而2111和1分别对应于userid和projid。

    更新行

    UPDATE users SET projid=4 WHERE projid=2;

    UPDATE users SET projid=1 WHERE userid=311;

    为了修改表中已存在的行,需要使用UPDATE语句。使用SET来确定要修改的列,并提供条件来确定修改的行。在第一个例子中,所有“projid”为2的用户需要改为4。而在第二个例子中,将指定用户(这里是userid为311的用户)移到编号为#1的项目组中。

    删除行

    DELETE FROM users WHERE projid=%d;

    DELETE FROM users;

    为了删除表中的行,需要使用DELETE FROM 命令,指定准备删除的行的表名以及可选的条件。如果没有这个条件,就会像第二个例子样,把所有行都删除了。

    以上就是数据库的一些基本的操作,从上我们可以看出:

    创建数据库(create)和删除数据库(drop),创建表和删除表也一样。

    修改表中已存在的行叫做更新(update)和往数据库里添加新行叫做插入(insert)

    而移出表中已存在的行叫做删除(delete)。

    这些动作通常称为数据库命令或操作。使用可选的条件请求数据库中的行称为询查(query)。

     

    大纲

    数据库的基本操作

    函数属性&对象方法

    连接数据库

     

     

    2、ALTER修改
    修改数据库格式:
      ALTER DATABASE 名称 [CHARACTER SET 编码][COLLATE 比较格式];
    修改数据库表的格式:
      ALTER TABLE 名称 [ADD|CHANGE|DROP|MODIFY] 字段名称 [新名称] [数据类型]

    1.1.JDBC

    JDBC(Java Database Connectivity)提供了访问数据库的API,由一些Java类和接口组成,是Java运行平台核心库中的一部分。用Java语言编写的数据库驱动程序称为JDBC数据驱动程序。

    也就是说使用JDBC可以达到通过JDBC实现应用程序操纵数据库的效果。

    使用JDBC进行如下操作:

    • 与一个数据库建立连接
    • 向已经连接的数据库发送SQL语句
    • 处理SQL语句返回的结果

    函数属性&对象方法

    数据库的基本操作

    创建数据库:

    CREATE DATABASE test;

    GRANT ALL ON test.* to user(s);

    第一行创建了一个名为“test”的数据库,假设你是数据库的管理员,第二行语句可以为指定用户(或所有用户)提升权限

    使用数据库

    USE test;

    如果你已经登录一个数据库系统,但是还没有选择你希望使用的数据库,这条简单的语句可以让你指定一个数据库,用来执行数据库操作。

    删除数据库

    DROP DATABASE test;

    这条简单的语句可以从数据库中移除所有表和数据,并将其从系统中删除。

    创建表

    CREATE TABLE users (login VARCHAR(8), userid INT, projid INT);

    这条语句创建一个新表,其中包含字符串列login,以及两个整型列:userid和projid。

    删除表

    DROP TABLE users;

    这条简单的语句可以删除数据库中的一个表,并清空其中的所有数据。

    插入行

    INSERT INTO users VALUES('leanna',2111,1);

    可以使用INSERT语句向数据库中插入一个新行。需要指定表名以及其中每列的值。对于本例而言,字符串“leanna”对应于login参数,而2111和1分别对应于userid和projid。

    更新行

    UPDATE users SET projid=4 WHERE projid=2;

    UPDATE users SET projid=1 WHERE userid=311;

    为了修改表中已存在的行,需要使用UPDATE语句。使用SET来确定要修改的列,并提供条件来确定修改的行。在第一个例子中,所有“projid”为2的用户需要改为4。而在第二个例子中,将指定用户(这里是userid为311的用户)移到编号为#1的项目组中。

    删除行

    DELETE FROM users WHERE projid=%d;

    DELETE FROM users;

    为了删除表中的行,需要使用DELETE FROM 命令,指定准备删除的行的表名以及可选的条件。如果没有这个条件,就会像第二个例子样,把所有行都删除了。

    以上就是数据库的一些基本的操作,从上我们可以看出:

    创建数据库(create)和删除数据库(drop),创建表和删除表也一样。

    修改表中已存在的行叫做更新(update)和往数据库里添加新行叫做插入(insert)

    而移出表中已存在的行叫做删除(delete)。

    这些动作通常称为数据库命令或操作。使用可选的条件请求数据库中的行称为询查(query)。

     

    为user表新增一个字段password 字符串32
      ALTER TABLE user ADD password VARCHAR(32);

    1.2.连接

    JDBC可以调用本地的JDBC数据库驱动程序和相应的数据库建立连接,一般有如下步骤:

    (1)加载JDBC数据库驱动程序

    不同数据库厂商提供了不同的JDBC驱动程序,想要连接操作数据库时,就必须下载相应的JDBC。比如MySQL的JDBC可以去mysql的官网下载,将下载到的JDBC数据库驱动程序(mysql-connector-java*.jar)复制到Tomcat所使用的JDK的拓展目录中(../jre/lib/ext),或者复制到tomcat的安装目录/common/lib下。

    //应用程序加载MySQL的JDBC数据库驱动程序代码
    try{
         Class.forName("com.mysql.jdbc.Driver");
    }catch(Exception e){}
    

    (2)与指定的数据库建立连接

    Java.sql包中的DriverManager类中有两个用于建立连接的类方法(static方法):

    Connection getConnection(java.lang.String,java.lang.String,java.lang.String)
    Connection getConnection(java.lang.String)
    

    它们都会抛出SQLException异常。DriverManger类调用上面的方法可以和数据库建立连接,返回一个connection对象。

    假设mysql服务正常启动,其服务器ip为192.3.4.5,使用默认端口3306,用户pinnsvin的密码是pinnsvin,并且对数据库test有所有权限,那么建立连接代码如下:

    //使用三个参数的方法
    try{
      String uri="jdbc:mysql;//192.3.4.5:3306/test";
      String user="pinnsvin";
      String password="pinnsvin";
      con=DriverManager.getConnection(uri,user,pass);
    }
    catch(SQLException e){
      System.out.println(e);
    }
    //使用一个参数的方法
    try{
     String uri="jdbc:mysql://192.3.4.5:3306/test?user=pinnsvin&password=pinnsvin";
     con=DriverManger.getConnection(uri);
    } catch(SQLException e){
      System.out.println(e);
    }
    

    connect()函数属性

    user                     用户名
    password               密码
    host                     主机名
    database               数据库名  MySQLdb数据库使用的是db
    dsn                      数据源名
    connect()函数通过 Connection 对象访问数据库。兼容模块必须实现 connect()函数,该函数创建并返回一个 Connection 对象。
    

    应用与数据库之间进行通信需要建立数据库连接。它是最基本的机制,只有通过数据库连接才能把命令传递到服务器,并得到返回的结果。当一个连接(或一个连接池)建立后,可以创建一个游标,向数据库发送请求,然后从数据库中接收回应。

     

    Connection 对象方法
    Connection 对象不需要包含任何数据属性

    close()                                关闭数据库连接
    commit()                                提交当前事务
    rollback()                              取消当前事务
    cursor()                                使用该连接创建(并返回)一个游标或类游标的对象
    errorhandler(cxn,cur,errcls,errval)          作为给定连接的游标的处理程序                                
    

     

    当使用 close()时,这个连接将不能再使用,否则会进入到异常处理中。

    如果数据库不支持事务处理,或启用了自动提交功能,commit()方法都将无法使用。如果你愿意,可以实现单独的方法用来启动或关闭自动提交功能。

    处理的数据库而言,只需要在方法中实现“pass”即可。

    和 commit()相似,rollback()方法也只有在支持事务处理的数据库中才有用。发生异常之后,rollback()会将数据库的状态恢复到事务处理开始时。

    如果 RDBMS 不支持游标,那么 cursor()仍然会返回一个尽可能模仿真实游标的对象。这是最基本的要求。每个适配器开发者都可以为他的接口或数据库专门添加特殊属性。

    当你完成数据库连接并关闭游标时,需要对所有操作执行 commit(),并对你的连接执行close()。

     

    函数属性&对象方法

    connect()函数属性

    user                     用户名
    password               密码
    host                     主机名
    database               数据库名  MySQLdb数据库使用的是db
    dsn                      数据源名
    connect()函数通过 Connection 对象访问数据库。兼容模块必须实现 connect()函数,该函数创建并返回一个 Connection 对象。
    

    应用与数据库之间进行通信需要建立数据库连接。它是最基本的机制,只有通过数据库连接才能把命令传递到服务器,并得到返回的结果。当一个连接(或一个连接池)建立后,可以创建一个游标,向数据库发送请求,然后从数据库中接收回应。

     

    Connection 对象方法
    Connection 对象不需要包含任何数据属性

    close()                                关闭数据库连接
    commit()                                提交当前事务
    rollback()                              取消当前事务
    cursor()                                使用该连接创建(并返回)一个游标或类游标的对象
    errorhandler(cxn,cur,errcls,errval)          作为给定连接的游标的处理程序                                
    

     

    当使用 close()时,这个连接将不能再使用,否则会进入到异常处理中。

    如果数据库不支持事务处理,或启用了自动提交功能,commit()方法都将无法使用。如果你愿意,可以实现单独的方法用来启动或关闭自动提交功能。

    处理的数据库而言,只需要在方法中实现“pass”即可。

    和 commit()相似,rollback()方法也只有在支持事务处理的数据库中才有用。发生异常之后,rollback()会将数据库的状态恢复到事务处理开始时。

    如果 RDBMS 不支持游标,那么 cursor()仍然会返回一个尽可能模仿真实游标的对象。这是最基本的要求。每个适配器开发者都可以为他的接口或数据库专门添加特殊属性。

    当你完成数据库连接并关闭游标时,需要对所有操作执行 commit(),并对你的连接执行close()。

     

    Cursor 对象

     

    当建立连接后,就可以和数据库进行通信了。游标可以让用户提交数据库命令,并获得查询的结果行。

    当游标创建好后,就可以执行查询或命令(或多个查询和命令),并从结果集中取回一行或多行结果。

    游标对象最重要的属性是 execute*()和 fetch*()方法,所有针对数据库的服务请求都是通过它们执行的。arraysize 数据属性在为 fetchmany()设置默认大小时非常有用。当然,在不需要时关闭游标是个好主意,而如果你的数据库支持存储过程,可能会用到callproc()。

     

    为user表中的name字段重命名为username
      ALTER TABLE user CHANGE name username VARCHAR(20);

    1.3.乱码解决

    (1)数据库和表使用中文支持的字符编码

    关于在DBMS中设置编码方式可以参考MySQL设置字符编码一文.

    (2)连接数据库支持中文编码

    try{ Class.forName("com.mysql.jdbc.Driver");
    


    }catch(Exception e){
    System.out.print(“忘记把mysql数据库的JDBC驱动程序复制到JDK的拓展目录或tomcat*/common/lib中了");
    }
    try{ String uri="jdbc:mysql://127.0.0.1/test?user=pinnsvin&password=pinnsvin&characterEncoding=utf8"; con=DriverManager.getConnection(uri); } catch(SQLException e){ System.out.print(e); }

     

    Cursor 对象

    arraysize                          使用fetchmany方法时,一次取出的结果行数,默认为1
    connection                         创建此游标的链接(可选)
    description                        返回游标活动状态(7选项元组):(name,type_code,display_size,internal_size,precision,scale,null_ok)
    lastrowid                          上次修改的行ID(可选:如果不支持行ID,则返回None)
    rowcount                           上次execute*()方法处理或影响的行数
    callproc(func[,args])              调用储存过程
    close()                              关闭游标
    execute(op[,args])                执行数据库查询或命令
    executemany(op,args)             类似execute()和map()的结合,为给定的所有参数准备执行的数据库查询或命令
    fetchone()                           获取查询结果的下一行
    fetchmany([size=cursor.arraysize])      获取查询结果的下面size行
    fetchall()                            获取查询结果的所有(剩余)行
    __iter__()                           为游标创建迭代器对象(可选,参考next())
    messages                            游标执行后从数据库中获取的消息列表(元组结合,可选)
    next()                                被迭代器用于获取查询结果的下一行(可选,类似fetchone(),参考__iter__())
    nextset()                             移动到下一个结果集合(如果支持)
    rownumber                            当前结果集中游标的索引(以行为单位,从0开始,可选)
    setinputsizes(sizes)               设置允许的最大输入大小(必须有,但是实现是可选的)
    setoutputsize(size[,col])         设置大列获取的最大缓冲区大小(必须有,但是实现是可选的)
    

    当建立连接后,就可以和数据库进行通信了。游标可以让用户提交数据库命令,并获得查询的结果行。

    当游标创建好后,就可以执行查询或命令(或多个查询和命令),并从结果集中取回一行或多行结果。

    游标对象最重要的属性是 execute*()和 fetch*()方法,所有针对数据库的服务请求都是通过它们执行的。arraysize 数据属性在为 fetchmany()设置默认大小时非常有用。当然,在不需要时关闭游标是个好主意,而如果你的数据库支持存储过程,可能会用到callproc()。

     

    连接数据库

     

    大纲 数据库的基本操作 函数属性对象方法 连接数据库 数据库的基本操作 创建数据库: CREATE DATABASE test; GRANT ALL ON tes...

    删除user表中的test字段
      ALTER TABLE user DROP test;

    2.查询记录

    和数据库建立连接后,就可以使用JDBC提供的API与数据库交互信息,比如查询、插入、更新、删除数据库表中数据以及对标的操纵。

    类对象和构造函数

    Date (yr, mo, dy)                  日期值对象
    Time (hr, min, sec)                  时间值对象
    Timestamp (yr, mo, dy, hr, min, sec)         时间戳值对象
    DateFromTicks (ticks)                日期对象,给出从新纪元时间(1970 年 1 月 1 日 00:00:00 UTC)以来的秒数
    TimeFromTicks (ticks)                时间对象,给出从新纪元时间(1970 年 1 月 1 日 00:00:00 UTC)以来的秒数
    TimestampFromTicks (ticks)             时间戳对象,给出从新纪元时间(1970 年 1 月 1 日 00:00:00 UTC)以来的秒数
    Binary (string)                   对应二进制(长)字符串对象
    STRING                       表示基于字符串列的对象,比如 VARCHAR
    BINARY                        表示(长)二进制列的对象,比如 RAW、BLOB
    NUMBER                       表示数值列的对象
    DATETIME                      表示日期/时间列的对象
    ROWID                       表示“行 ID”列的对象
    

     

    修改user表中username字段的长度为30
      ALTER TABLE user MODIFY username VARCHAR(30);

    2.1.结果集与查询

    数据库的查询结果会返回到一个Resquest对象中,习惯上称Request对象为结果集对象。

    (1)SQL语句对象

    使用Statement声明一个SQL语句对象,然后让已创建连接的对象con调用方法createStatement() 创建这个SQL语句对象,代码:

    try{
      Statement sql=con.createStatement();
    }
    catch(SQLException e){
      System.out.print(e);
    }
    

    (2)SQL语句对象调用方法查询数据

    SQL语句对象可以调用相应的方法查询数据库中的表,并将查询结果放在一个Resquest结果集中。例如:

    Resquest rs=sql.executeQuery(“SELECT name,sex FROM user”);

    结果集对象rs有两列,第一列是name,第二列是sex。

    Request结果集一次只能看一个数据行,使用next()方法走到下一行。

    Request类常用方法

    新葡亰496net 1

    (3)获取结果集列的数目

    ResultSetMetaData(结果集的元数据对象)

    ResultSetMetaData md=rs.getMetaData();
    int colcount=md.getColumnCount();
    

    (4)获取结果集第i列的名字

    ResultSetMetaData md=rs.getMetaData();
    String colname=md.getColumnName(i);
    

    连接数据库

    以MySQL为例:

    打开cmd输入:pip3 install mysqlclient    安装mysql驱动
    
    >>> import MySQLdb as mysql         导入MySQL驱动重名为mysql
    >>> conn = mysql.connect('127.0.0.1','root','root')            连接数据库
    >>> conn = mysql.connect(host='127.0.0.1', port=3306, user='root', passwd='root', db='test', charset='utf8')        也可以使用关键字连接数据库
    >>> config = {
        'host': '127.0.0.1',
        'port': 3306,
        'user': 'root',
        'passwd': 'root',
        'db': 'test',
        'charset': 'utf8'
    }
    >>> conn = mysql.connect(**config)        也可以使用字典连接数据库
    >>> cur = conn.cursor()      创建cursor对象
    >>> cur.execute('create table users (id varchar(20) primary key, name varchar(20))')         创建users表
    >>> id = 1
    >>> name = "smelond"
    >>> cur.execute("insert into users values('%s','%s')" % (id,name))            插入一行记录,注意MySQL的占位符是%s
    >>> cur.execute("update users set id=2 where id=1")                      修改一行记录
    >>> cur.execute("select * from users")                    查询记录
    >>> values = cur.fetchall()                    将查询的记录赋给values
    >>> values                                         输出values
    (('2', 'smelond'),)
    >>> cur.execute("insert into users values(3,'admin')")                     再次添加记录
    >>> cur.execute("select * from users")
    >>> values = cur.fetchall()
    >>> values
    (('2', 'smelond'), ('3', 'admin'))
    
    >>> conn.commit()             提交
    >>> cur.close()              关闭cursor
    >>> conn.close()                关闭connection
    

     

    修改user的表名为user1
      RENAME TABLE user TO user1;

    2.2.随机查询

    有时候我们需要一个可滚动的结果集,为了获取一个滚动的结果集,必须先获得一个Statement对象,然后根据参数type,concurrency的取值情况,返回相应的类型的结果集。

    Statement stmt=con.createStatement(int type,int concurrency);
    Request re=stmt.executeQuery(SQL语句);
    

    type取值及说明:

    ResultSet.TYPE_FORWORD_ONLY 结果集的游标只能向下滚动
    ResultSet.TYPE_SCROLL_INSENSITIVE 结果集的游标可以上下滚动,当数据库变化时,当前结果集不变
    ResultSet.TYPE_SCROLL_SENSITIVE 返回可滚动的结果集,当数据库变化时,当前结果集同步改变

    concurrency取值及说明:

    ResultSet.CONCUR_READ_ONLY 不能使用结果集更新数据库中的表
    ResultSet.CONCUR_UPDATABLE 能用结果集更新数据库中的表

    滚动查询常用方法:

    public boolean previous() 将游标向上移动,当移动到结果集第1行的前面时返回false
    public void beforeFirst() 将游标移动到结果集的初始位置,第一行之前
    public void afterLast() 将游标移动到结果集最后一行之后
    public void first() 将游标移动到结果集的第一行
    public void last() 将游标移动到结果集的最后一行
    public boolean isAfterLast() 判断游标是否在最后一行之后
    public boolean isBeforeFirst() 判断游标是否在第一行之前
    public boolean isFirst() 判断游标是否指向结果集的第一行
    public boolean isLast() 判断游标是否指向结果集的最后一行
    public int getRow() 得到当前游标所指行的行号,行号从1开始,如果结果集没有行,返回0
    public boolean absolute(int row) 将游标移动到参数row指定的行号,如果row取负值,就是倒数的行数

    3.操纵数据

    ORM技术(sqlalchemy)

    在Python中,最有名的ORM框架是SQLAlchemy

    安装SQLAlchemy

    pip3 install sqlalchemy
    
    # 导入模块
    from sqlalchemy import Column, String, create_engine, INT
    from sqlalchemy.orm import sessionmaker
    from sqlalchemy.ext.declarative import declarative_base
    
    # 创建对象的基类:
    Base = declarative_base()
    
    
    # 定义User对象
    class User(Base):
        __tablename__ = "users"
    
        # 表的结构
        id = Column(INT, primary_key=True)
        name = Column(String(20))
    
    
    # 初始化数据库连接
    # create_engine()用来初始化数据库连接。SQLAlchemy用一个字符串表示连接信息
    engine = create_engine("mysql://root:root@127.0.0.1:3306/test")
    # 创建DBSession类型
    DBSession = sessionmaker(bind=engine)
    

    向数据库表中添加一行记录。
    由于有了ORM,我们向数据库表中添加一行记录,可以视为添加一个User对象:

    # 创建session对象
    session = DBSession()
    # 创建新User对象
    new_user = User(name='smelond')  # 由于我在数据库里面设置id为主键,并且自动增长,所以这个地方可以不带id。
    # 添加到session
    session.add(new_user)
    # 提交即保存到数据库
    session.commit()
    # 关闭session
    session.close()
    

    关键是获取session,然后把对象添加到session,最后提交并关闭。DBSession对象可视为当前数据库连接。

    查询记录:

    # 创建session对象
    session = DBSession()
    # 创建Query查询,filter是where条件,最后调用one()返回唯一行,如果条用all()则返回所有行:
    result = session.query(User).filter(User.name == 'smelond').one()
    print("type:", type(result))
    print("name:", result.name)
    session.close()
    
    
    结果:
    type: <class '__main__.User'>
    name: smelond
    

     从上面我们可以看出“还是ORM比较好用”。

     

    3、DROP删除
    删除数据库格式:
      DROP DATABASE [ if EXISTS] 名称;
    删除数据表格式:
      DROP TABLE 名称;
    删除数据库mydb4:DROP DATABASE IF EXISTS mydb4;
    删除test3表:DROP TABLE IF EXISTS test3;

    3.1.添加、更新、删除记录

    使用SQL语句添加、更新、删除纪录。Statement对象调用public int executeUpdate(String sqlStatement)方法通过参数sqlStatement指定的方式实现向数据库表中添加、更新、删除纪录。

        //添加
        executeUpdate("INSERT INTO user VALUES('007','邦德');
    


    //更新
    executeUpdate("UPDATE user SET name='詹姆斯·邦德'");
    //删除
    executeUpdate("DELETE FROM user WHERE id='007'");

     

    4、INSERT新增语句
    格式:INSERT INTO 表名[(字段名称)] VALUES(值1,值2);
      INSERT INTO user (id,username,password,flag) VALUES(5,'战旗','838',1);
    //简写形式
      INSERT INTO user VALUES5(5,'战旗','838',1);

    3.2.用结果集操作数据库中的表

    如果熟悉数据库的DML语句,不必使用这种方式,使用结果集操作数据库表必须先返回结果集。为了避免中文乱码,数据的连接方式中需要加入characterEncoding=uft8或gb2312或gbk。例如:

    try{
      Class.forName("com.mysql.jdbc.Driver");
    }
    catch(Exception e){
      System.out.print("缺失JDBC驱动程序");
    }
    try{
      String uri="jdbc:mysql://127.0.0.1/test?" "user=pinnsvin&password=pinnsvin&characterEncoding=utf8";
      //默认端口可以省略,使用 为了使代码清晰
      con=DriverManager(uri);
      Statement sql=con.createStatement(ResultSet.TYPE_SCRO;;_SECSITIVE,ResultSet.CONCUR_UPDATABLE);
    ResultSet rs=sql.executeQuery("SELECT * FORM user");
    }
    catch(SQLException e){
      System.out.print(e);
    }
    

    3.2.1.更新

    使用结果集更新数据库表中第n行记录中某列的值:

    (1)使结果集rs的游标移动到第n行

              rs.absolute(n);

    (2)结果集更新第n行第m列的值,可以使用下面的方法更新列值

    updateInt(String columnName,int x) updateInt(int columnIndex,int x)
    updateLong(String columnName,long x) updateLong(int columnIndex,long x)
    updateDouble(String columnName,double x) updateDouble(int columnIndex,double x)
    updateString(String columnName,String x) updateString(int cloumnIndex,String x)
    updateBoolean(String columnName,Boolean x) updateBoolean(int columnIndex,Boolean x)
    updateDate(String columnName,Date x) updateDate(int columnIndex,Date x)

    (3)结果集调用updateRow方法用结果集中的第n行更新数据库中第n行记录

    例:更新user表中第4行记录的name列的值

    rs.absolute(4);
    rs.updateString(2,"杰森斯坦森");//也可rs.updateString("name","杰森斯坦森");
    rs.updateRow();
    

    3.2.2.插入

    (1)使用moveToInsertRow()方法将结果集rs的游标移动到插入行

    (2)使用updateXxx()方法更新列值

    (3)结果集调用insertRow()方法用结果集中的插入行向数据库表中插入一行新纪录

    5、UPDATE修改语句
    格式:UPDATE 表名 SET 字段名称=值[多个字段] [WHERE 条件]

    4.预处理语句

    Java提供了更高效的数据库操作机制,就是PreparedStatement对象,也就是预处理语句对象。

    修改id为2的用户名字为金星
      UPDATE user SET username='金星' WHERE id=2;
    修改id为3的用户的名字和密码
      UPDATE user SET username='网警',password="654321" WHERE id=3;
    修改user中所有的密码为123456
      UPDATE user SET password='123456';

    4.1.为什么使用预处理语句呢?

    当向数据库发送一个SQL语句,数据库库中的SQL解释器负责将SQL语句生成底层的内部命令,然后执行该命令,完成有关的数据操作。如果不断的向数据库发送SQL语句就会增加数据库中SQL解释器的负担,影响执行速度。如果应用程序能针对连接的数据库,事先将SQL语句解释为底层的内部命令,然后直接然数据库执行这个命令,这样会降低解释器的压力,并且提高访问速度。

    6、DELETE删除语句
    删除表中的数据
    格式:DELETE FROM 表名 [where 条件];

    4.2.如何使用预处理语句?

    使用Connection连接对象调用prepareStatement(String sql)方法对参数sql指定的SQL语句进行预编译处理,生成该数据库底层的内部命令,并将该命令封装在PreparedStatement对象pre中,pre可以调用下面的方法执行内部命令:

    ResultSet executeQuery()

    boolean execute()

    int executeUpdate()

    删除user中名称为王星的人
      DELETE FROM user WHERE username='王星';

    4.3.使用通配符

    在对SQL进行预处理时可以使用通配符“?”来代替字段的值,必须在语句执行前设置通配符代表的值。

    prepareStatement pre=con.prepareStatement("SELECT * FROM user WHERE age<?");
    pre.setInt(1,18);//设置第一个通配符的值为18
    

    开发中的删除:
    1、真删除
    直接使用DELETE语句删除指定的数据
    2、假删除
    使用UPDATE 修该指定字段

    5.事务

    为user表新增一字段,flag标记是否有效,0有效1删除
    ALTER TABLE user ADD flag int;
    UPDATE user SET flag=0;
    SELECT * FROM user WHERE flag=0;
    UPDATE user SET flag=1 WHERE id=4;

    5.1.什么是事务?

    事务(Transaction)是并发控制的单位,是用户定义的一个操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位。事务是保证数据库中数据完整性与一致性的重要机制。

    7、SELECT查询语句
    主要用来查询数据
    格式:SELECT * |字段名称|函数 FROM 表名 [WHERE 条件] [order by 字段名称] [group by 字段名称][having 条件][limit 限制]
    1、*
      *在查询语句中表示当前表的所有字段(顺序为建表时字段顺序)
    2、where条件:
      常用的条件符合:
    1、=、<、>、!=、<>、<=、>=
    2、AND:并且,同时满足
    3、OR:或者,满足其一
    4、IN (值,……):对应的字段的值再()里,一般不连续的多个值
    5、between A and B:在A和B之间,[A,B]
    6、IS NULL:为空
    7、NOT:不
    8、子查询

    5.2.JDBC事务处理步骤

    5.2.1.setAutoCommit(boolean autoCommit)方法

    使用setAutoCommit(boolean autoCommit)方法关闭自动提交模式。

    因为和数据库建立连接的对象con的提交模式是自动提交模式,即该连接con产生的Statement或PreparedStatement对象对数据库提交任何一个SQL语句操作会立即生效。为了能进行事务处理必须关闭con的自动提交模式(默认)。

    con.setAutoCommit(false);

    5.2.2.Commit()方法

    con调用commit()方法可以让事务中的SQL语句全部生效。如果事务中任何一个SQL语句没有生效,就会抛出SQLException异常。

    5.2.3.rollback()方法

    在处理SQLException时,con必须调用rollback()方法,它的作用是:撤销引起数据发生变化的SQL语句操作,将数据库中的数据恢复到commit()方法执行之前的状态。

    查询user表中所有信息
    SELECT * FROM user;
    等价于
    SELECT id,username,password,flag FROM user;

    查询有效的名字
    SELECT username FROM user WHERE flag=0;

    查询id大于1小于6的人
    SELECT * FROM user WHERE id<6 AND id>1;
    等价
    SELECT * FROM user WHERE id BETWEEN 2 AND 5;

    查询id为4或者id为8
    SELECT * FROM user WHERE id=4 OR id=8;

    查询id不为6的人
    SELECT * FROM user WHERE id!=6;
    等价
    SELECT * FROM user WHERE id<>6;

    查询id为2或5或6的人
    SELECT * FROM user WHERE id=2 OR id=5 OR id=6;
    等价
    SELECT * FROM user WHERE id IN (2,5,6);

    8、实名登录
    shell> mysql -h host -u user -p
    Enter password: ********

    9、匿名登录
      一些MySQL安装允许用户以匿名(未命名)用户连接到本地主机上运行的服务器。如果你的机器是这种情况,你应该能不带任何选项地调用mysql与该服务器连接:

    shell> mysql
    成功地连接后,可以在mysql>提示下输入QUIT (或q)随时退出:

    mysql> QUIT
    Bye
      在Unix中,也可以按control-D键断开服务器。

    10、c取消命令
    如果你决定不想执行正在输入过程中的一个命令,输入c取消它:
    例如:
    mysql> SELECT
    -> USER()
    -> c
    mysql>
      这里也要注意提示符,在你输入c以后,它切换回到mysql>,提供反馈以表明mysql准备接受一个新命令。

    下表显示出可以看见的各个提示符并简述它们所表示的mysql的状态:
    提示符  含义
    mysql>  准备好接受新命令。
    ->    等待多行命令的下一行。
    '>    等待下一行,等待以单引号(“'”)开始的字符串的结束。
    ">    等待下一行,等待以双引号(“"”)开始的字符串的结束。
    >    等待下一行,等待以反斜点(‘’)开始的识别符的结束。
    />    等待下一行,等待以/开始的注释的结束。

    11、SHOW显示
    使用SHOW DATABASES;语句找出服务器上当前存在什么数据库
    SHOW TABLES;使用某个数据库后,显示这个数据库中的表

    12、DESCRIBE 描述
    mysql> DESCRIBE pet;

    13、文件导入到表
      要想将文本文件“pet.txt”装载到pet表中,使用这个命令:
    mysql> LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet;
      请注意如果用Windows中的编辑器(使用rn做为行的结束符)创建文件,应使用:
    mysql> LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet
    -> LINES TERMINATED BY 'rn';
      (在运行OS X的Apple机上,应使用行结束符'r'。)
      如果你愿意,你能明确地在LOAD DATA语句中指出列值的分隔符和行尾标记,但是默认标记是定位符和换行符。这对读入文件“pet.txt”的语句已经足够

    14、数据库的备份和恢复
    数据的备份
      在cmd中,输入:mysqldump -u 用户名 -p 要备份的数据库 >路径/文件名称.sql

    数据的恢复
      需要进入到Mysql,创建数据库,并使用数据库
      source 要恢复的sql文件的路径;

    本文由新葡亰496net发布于奥门新萄京娱乐场,转载请注明出处:新葡亰496netpython数据库编制程序,MYSQL常用简易语

    关键词:

上一篇:新葡亰496net:零件种类,删除图形

下一篇:没有了