連接和操作數(shù)據(jù)庫的方法
-
使用數(shù)據(jù)庫驅(qū)動直接連接屎债,我使用的oralce數(shù)據(jù)庫
做一個應用或者建站總是要使用不同的數(shù)據(jù)庫或者其他方式來存貯我們的數(shù)據(jù)横漏。
首先要先下載python中支持連接oralce的包cx_Oracle,可以下載安裝粗梭。或者直接在cmd使用命令
pip install cx_Oracle xxxxxx # xxxx是你的版本號
1.要注意的是不同版本的oralce數(shù)據(jù)庫使用的包的版本是不同的
2.windows系統(tǒng)下可能要你先安裝C++環(huán)境
安裝完成后迁沫,創(chuàng)建一個文件苇倡,簡單測試一下。(創(chuàng)建一個database_link.py)import cx_Oracle conn = cx_Oracle.connect('dw_hos/dw_hos@localhost/orcl') c = conn.cursor() x = c.execute('select sysdate from dual') rows = x.fetchone() c.close() conn.close() print(rows)
在控制臺就可以看到查詢回來的數(shù)據(jù)庫時間了审姓。
link的方式增刪查改都是使用的SQL語句珍特,然后創(chuàng)建oralce的cursor來執(zhí)行,執(zhí)行后關閉魔吐。
-
使用Flask-SQLAlchemy管理扎筒。
首先給出flask各類數(shù)據(jù)庫的連接字符串格式。格式如下
dialect+driver://username:password@host:port/database
再舉出幾個常用的例子,其他的可以在官方文檔中查閱:
mysql://scott:tiger@localhost/mydatabase # MYSQL oracle://scott:tiger@127.0.0.1:1521/sidname # ORACLE sqlite:////absolute/path/to/foo.db # SQLLITE
這里我用的是oracle數(shù)據(jù)庫:
創(chuàng)建一個簡單的demo來運行一下(創(chuàng)建一個database_orm.py):from flask import Flask from flask.ext.sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'oracle://dw_hos:dw_hos@localhost:1521/orcl' db = SQLAlchemy(app) # 下面是數(shù)據(jù)模型的聲明 class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(80), unique=True) email = db.Column(db.String(120), unique=True) def __init__(self, username, email): self.username = username self.email = email def __repr__(self): return '<User %r>' % self.username
從python shell中進入db對象并調(diào)用SQLAlchemy.create_all() 方法來創(chuàng)建表和數(shù)據(jù)庫:
>>> from database_orm import db >>> db.create_all()
這時候是有了數(shù)據(jù)表格了酬姆,我們創(chuàng)建一些對象(插入一些數(shù)據(jù))
>>> from yourapplication import User >>> admin = User('admin', 'admin@example.com') >>> guest = User('guest', 'guest@example.com')
這時候還沒插入數(shù)據(jù)砸琅,我們要將之插入數(shù)據(jù)庫
>>> db.session.add(admin) >>> db.session.add(guest) >>> db.session.commit()
查詢也是非常簡單的
>>> users = User.query.all() [<User u'admin'>, <User u'guest'>] >>> admin = User.query.filter_by(username='admin').first() <User u'admin'>
以上就是兩種對數(shù)據(jù)庫連接和操作的方式。