python訪問數據庫

一:SQLite

1.1.Sqlite數據庫簡介

  SQLite是一個嵌入式的數據庫,他的數據庫是個文件。python

  SQLite自己是c語音寫的,因此常常被集成到各類應用程序。mysql

  python就內置了SQLite,因此python使用SQLite不須要安裝任何東西,直接進行使用。sql

  鏈接到數據庫後須要打開遊標,稱之爲Cursor,經過Cursor執行sql預計和執行後的結果。數據庫

1.2使用SQLite數據庫

python中內置的與mysql交互的方法以下:session

#導入SQLit3
import  sqlite3

#鏈接sqlite3數據庫,數據庫文件是test.db,若是文件不存在會自動在當前目錄中建立
conn = sqlite3.connect('test.db')

#建立一個Cursor
cursor = conn.cursor()

#建立一個user表
cursor.execute('create table user (id varchar(20) primary key, name varchar(20) )')

#插入一條記錄
cursor.execute(inser into user(id , name) values('1',  'yaohong' ))

#獲取插入的條數
print cursor.rowcount

#關閉cursor
cursor.close()

#提交事務
cursor.commit()

#關閉conn
conn.close()

  

查詢結果數據結構

conn = sqlite3.connect('test.db')

cursor = conn.cursor()

#查詢
cursor.executr('select * from user where id=?', ('1',))

#得到查詢結果
values = cursor.fetchall()

print values

cursor.close()
conn.close()

 

查詢獲取的結果都是一個list,每一個元素都是一個tuple。框架

要確保打開的Connection對象和Cursor對象都正確地被關閉,不然,資源就會泄露。fetch

如何才能確保出錯的狀況下也關閉掉Connection對象和Cursor對象呢?請回憶try:...except:...finally:...的用法。code

 

二:MySql

2.1.python中鏈接MySql

#導入mysql驅動
import  mysql.connector

#鏈接mysql
conn = mysql.connector.connect(user='root', password='password', database='test', use_unicode=True)

#鏈接cursor
cursor = conn.cursor()

#建立usr表
cursor.exect('create table user  (id varchar(20) primary key, name varchar(20))')

cursor.execute('insert into user (id, name) values (%s, %s)', ['1', 'Michael'])

#提交事務
cursor.commit()
cursor.close()


#運行查詢

cursor = conn.cursor()
cursor.execute('select * from user where id = %s', ('1',))
values = cursor.fetchall()
cursor.close()
conn.close()

  

三:SQLAlchemy

3.2.ORM

        數據庫是個二維表,包含對行多列。把一個表用python的數據結構來表示的話,能夠用一個list表示多行,list的每行是個tuple。以下用id和name的user表。orm

[
    ('1', 'Michael'),
    ('2', 'Bob'),
    ('3', 'Adam')
]

  若是用tuple很難看出表的結構,若是把一個tuple用一個class來表示,就能夠更容易的看出表結構。

class  User(object):
    def __init__(self, id, name):
        self.id = id
        self.name = name

[
    User('1', 'jack'),
    User('2', 'yaohong')          
]

  以上就是ORM(對象關係)映射

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

3.1.使用SQLAlchemy

   

# 導入:
from sqlalchemy import Column, String, create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base

#建立對象的基類
Base = declarative_base()

#定義User對象
class  User(Base):
       #表的名字
        __tablename__ = 'user'

       #表的結構
        id = Column(String(20), primary_key=True)
        name = Column(String(20))

# 初始化數據庫鏈接:
engine = create_engine('mysql+mysqlconnector://root:password@localhost:3306/test')

# 建立DBSession類型:
DBSession = sessionmaker(bind=engine)

  若是有多個表,則再定義一個class

class School(Base):
    __tablename__ = 'school'
    id = ...
    name = ...

  添加數據

# 建立session對象:
session = DBSession()

# 建立User對象
new_user = User(id='5', name='Bob')

#添加到session
session.add(new_user)

#提交即保存到數據庫:
session.commit()

# 關閉session:
session.close()

  查詢數據

#session
session = DBSession()

#建立Query查詢,filter是where條件,最後調用one()返回惟一行,若是調用all()則返回全部行:
user = session.query(User).filter(User.id=='5').one()

#關閉session
session.close()

  一對多關係

class User(Base):
    __tablename__ = 'user'

    id = Column(String(20), primary_key=True)
    name = Column(String(20))
    # 一對多:
    books = relationship('Book')

class Book(Base):
    __tablename__ = 'book'

    id = Column(String(20), primary_key=True)
    name = Column(String(20))
    # 「多」的一方的book表是經過外鍵關聯到user表的:
    user_id = Column(String(20), ForeignKey('user.id'))

  當咱們查詢一個User對象時,該對象的books屬性將返回一個包含若干個Book對象的list。

相關文章
相關標籤/搜索