MySQL

MySQL 的下载与配置

操作系统:OS X

下载:https://dev.mysql.com/downloads/mysql/

安装:Mac安装MySQL很简单,一直下一步即可。注意:安装MySQL之后,安装的最后一步有一个初始密码,初始密码要记下来,密码忘了也是有办法改的,方法如下:

设置:
初始化密码比较麻烦,方法如下:

[转自脚本之家]
step1:
苹果->系统偏好设置->最下边点mysql 在弹出页面中 关闭mysql服务(点击stop mysql server)

step2:
进入终端输入:cd /usr/local/mysql/bin/
回车后 登录管理员权限 sudo su
回车后输入以下命令来禁止mysql验证功能 ./mysqld_safe --skip-grant-tables &
回车后mysql会自动重启(偏好设置中mysql的状态会变成running)

step3.
输入命令 ./mysql
回车后,输入命令 FLUSH PRIVILEGES;
回车后,输入命令 SET PASSWORD FOR 'root'@'localhost' = PASSWORD('你的新密码');
至此,密码修改完成,可以成功登陆。

Flask-SQLAlchemy 的使用

1、初始化和设置数据库配置信息

*使用flask_sqlalchemy中的SQLAlchemy进行初始化:

from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
db = SQLAlchemy(app)

2、设置配置信息,在‘config.py’文件中添加下面信息

#dialect+driver://username:password@host:port/database


DIALECT  = 'mysql'
DRIVER = 'mysqldb'
USERNAME = 'root'
PASSWORD = '941112'
HOST = '127.0.0.1'
PORT = '3306'
DATABASE = 'db_demo1'


SQLALCHEMY_DATABASE_URI = "{}+{}://{}:{}@{}:{}/{}?charset utf8".format(DIALECT,DRIVER,USERNAME,PASSWORD,HOST,PORT,DATABASE)

SQLALCHEMY_TRACK_MODIFICATIONS = False

3、主‘app’文件中,添加配置文件

from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
db = SQLAlchemy(app)

4、做测试看看有没有问题

db.create_all()

没有报错就是成功了!

5、使用Flask_SQLAlchemy创建模型与表的映射

创建模型与表的映射:
app = Flask(__name__)
app.config.from_object(config)

db = SQLAlchemy(app)
模型需要继承自db.Model,然后需要映射到表中的属性,必须写成db.Column的数据类型
class Article (db.Model):

    #声明时用'__tablename__'是系统规定的。
    __tablename__ = 'article'

    id = db.Column(db.Integer,primary_key = True,autoincrement = True)
    title = db.Column(db.String(100), nullable = False)
    content = db.Column(db.Text,nullable = False)
数据类型:
  • db.Integer代表的是整形;
  • db.String代表的是varchar,需要制定最长的长度;
  • db.Text代表的是text
其他参数:
  • primary_key代表的是将这个字段设置为主键;
  • autoincrement代表的是这个主键为自增长的;
  • nullable代表的是这个字段是否可以为空,默认是可以为空,可以将这个值设置为False,在数据库中,这个值就不能为空了;

6、Flask-SQLAlchemy数据的增、删、改、查

1、增:

    # 增加一个数据对象:
    article1 = Article(title='aaa',content='bbb')
    # 数据的增删改查都用session
    db.session.add(article1)
    # 这样只是对事务的操作
    db.session.commit()
    return 'index.html'

2、查:

    # select * from article wherer title = 'aaa';
    # 所有的查找都是query, filter = aaa
    result = Article.query.filter(Article.title == 'aaa').first()# first()取第一条数据
    #返回一个query对象
    # article1 = result[0]
    #
    # print article1.title
    # print article1.content

3、改:

    #1.先把要更改的数据查找出来
    article1 = Article.query.filter(Article.title == 'aaa').first()
    #2.把这条数据需要修改的地方进行修改
    article1.title = 'new title'
    #3.做事务的提交
    db.session.commit()

4、删:

    #1.把需要删除的数据查找出来
    article1 = Article.query.filter(Article.title == 'new title').first()
    #2.把数据删掉
    db.session.delete(article1)
    #3.事务提交
    db.session.commit()

7、Flask-SQLAlchemy外键及其关系:

外键(一对多):
#创建文章表
class User(db.Model):
    __tablename__ = 'user'
    id = db.Column(db.Integer,primary_key=True,autoincrement=True)
    username = db.Column(db.String(100),nullable=False)
    # psaaword = db.Column(db.String(100),nullable=False)

#创建用户表
class Article(db.Model):
    __tablename__ = 'article'
    id = db.Column(db.Integer,primary_key=True,autoincrement=True)
    title = db.Column(db.String(100),nullable=False)
    #创建外键`db.ForeignKey`
    author_id = db.Column(db.Integer, db.ForeignKey('user.id'))

    author = db.relationship('User', backref = db.backref('articles') )

解释! author = db.relationship(‘User’, backref = db.backref(‘articles’) )

1)给Article添加了一个author属性,可以访问这篇文章的作者的数据,就像访问普通模型一样。
2)backref是定义反向引用,可以通过User.article访问这个模型所写的所有文章

外键-多对多

以CSDN博客为例,一片博客可对应多个标签,一个标签也可以对应该标签类型下的多个博客,多博客对多标签的情况就是“多对多”。

多对多关系要通过一个中间表来实现。
中间表不能通过class实现,只能通过db.table来实现。
设置关联:tags = db.relationship('Tag',secondary = article_tag,backref = db.backref('articles'))
【其中:用secondary = 中间表进行关联】
访问和添加数据可以用一下方式进行操作:
——添加数据

    article1 = Article(title = 'aaa')
    article2 = Article(title = 'bbb')

    tag1 = Tag(name = '111')
    tag2 = Tag(name = '222')

    article1.tags.append(tag1)
    article1.tags.append(tag2)

    article2.tags.append(tag1)
    article2.tags.append(tag2)


    db.session.add(article1)
    db.session.add(article2)
    db.session.add(tag1)
    db.session.add(tag2)

    db.session.commit()
    ####第一步(添加数据)已完成

——访问数据,多对多应用实例:

    ####例如####
    ####拿到文章标题为aaa的文章 ->->->->-> 想知道这篇文章有哪些标签

    article1 = Article.query.filter(Article.title == 'aaa').first()
    tags = article1.tags
    for tag in tags:
        print tag.name
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1_创建admins表以及插入该表测试数据的脚本 DROP TABLE IF EXISTS `admins`; CREATE TABLE `admins` ( `管理员帐号` char(30) NOT NULL DEFAULT '', `用户名` char(30) NOT NULL DEFAULT '', `密码` char(8) DEFAULT NULL, PRIMARY KEY (`管理员帐号`,`用户名`), UNIQUE KEY `管理员帐号` (`管理员帐号`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `admins` VALUES ('admin1', '赵毅', '12345678'); INSERT INTO `admins` VALUES ('admin2', '陈丹', '123'); 2_创建inventory表以及插入该表测试数据的脚本 DROP TABLE IF EXISTS `inventory`; CREATE TABLE `inventory` ( `商品编号` int(10) unsigned NOT NULL DEFAULT '0', `商品名称` char(30) NOT NULL DEFAULT '', `当前库存量` int(10) unsigned NOT NULL, `最大库存量` int(10) unsigned NOT NULL, `最小库存量` int(10) unsigned NOT NULL, PRIMARY KEY (`商品编号`,`商品名称`), UNIQUE KEY `商品编号` (`商品编号`), UNIQUE KEY `商品名称` (`商品名称`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `inventory` VALUES ('15001', '计算机', '150', '500', '100'); INSERT INTO `inventory` VALUES ('15002', '打印机', '9', '30', '5'); INSERT INTO `inventory` VALUES ('15003', '扫描仪', '11', '20', '3'); INSERT INTO `inventory` VALUES ('15004', '路由器', '9', '20', '0'); INSERT INTO `inventory` VALUES ('15005', '交换机', '15', '30', '5'); 3_创建checkin表以及插入该表测试数据的脚本 DROP TABLE IF EXISTS `checkin`; CREATE TABLE `checkin` ( `序号` int(10) unsigned NOT NULL AUTO_INCREMENT, `耗材编号` int(10) unsigned DEFAULT NULL, `入库耗材` char(30) DEFAULT NULL, `数量` int(10) unsigned NOT NULL, `价格` float NOT NULL, `入库日期` date DEFAULT NULL, `入库时间` time DEFAULT NULL, PRIMARY KEY (`序号`), KEY `耗材编号` (`耗材编号`,`入库耗材`), CONSTRAINT `checkin_ibfk_1` FOREIGN KEY (`耗材编号`, `入库耗材`) REFERENCES `inventory` (`商品编号`, `商品名称`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; INSERT INTO `checkin` VALUES ('1', '15002', '打印机', '6', '2000', '2015-08-14', '15:59:12'); INSERT INTO `checkin` VALUES ('2', '15004', '路由器', '2', '3000', '2015-08-16', '11:33:55'); INSERT INTO `checkin` VALUES ('3', '15001', '计算机', '30', '2500', '2015-11-13', '15:30:50'); INSERT INTO `checkin` VALUES ('4', '15004', '路由器', '4', '2500', '2015-11-13', '08:33:12'); 4_创建checkout表以及插入该表测试数据的脚本 DROP TABLE IF EXISTS `checkout`; CREATE TABLE `checkout` ( `序号` int(10) unsigned NOT NULL AUTO_INCREMENT, `耗材编号` int(10) unsigned DEFAULT NULL, `出库耗材` char(30) DEFAULT NULL, `数量` int(10) unsigned NOT NULL, `库存管理员` char(30) DEFAULT NULL, `出库负责人` char(30) DEFAULT NULL, `出库日期` date DEFAULT NULL, `出库时间` time DEFAULT NULL, PRIMARY KEY (`序号`), KEY `耗材编号` (`耗材编号`,`出库耗材`), KEY `库存管理员` (`库存管理员`,`出库负责人`), CONSTRAINT `checkout_ibfk_1` FOREIGN KEY (`耗材编号`, `出库耗材`) REFERENCES `inventory` (`商品编号`, `商品名称`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `checkout_ibfk_2` FOREIGN KEY (`库存管理员`, `出库负责人`) REFERENCES `admins` (`管理员帐号`, `用户名`) ON DELETE SET NULL ON UPDATE CASCADE ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值