用Python访问数据库

80 阅读4分钟

1.通过pyodbc访问数据库

pyodbc是Python编程语言的一个开源ODBC数据库接口库,允许开发人员通过ODBC驱动程序连接到不同的关系型数据库。它支持Windows、Linux和macOS等多个操作系统,并与大部分常见的关系性数据库(如Oracle、MS SQL Server、MySQL等)兼容。

pyodbc提供了一种简单易用的方法来连接各种类型的数据源,并使用SQL或其他查询语言进行数据检索和处理。在使用pyodbc时,只需要安装适当版本的ODBC驱动程序,然后就可以轻松地创建与这些数据库之间通信所需联接对象并实现对其执行读取、更新和删除等各类标准化操作。

代码用例:

import pyodbc

# 定义DSN(Data Source Name)
# 对于linux服务器,DSN需要安装好odbc驱动之后在/etc/odbc.ini中去定义
dsn = 'mydb'

# 使用DSN创建Database Connection(DBConnection)对象
cnxn = pyodbc.connect('DSN='+dsn)

# 创建游标对象
cursor = cnxn.cursor()

# 执行SELECT查询
cursor.execute("SELECT * FROM mytable")

# 获取结果集中第一行数据
row = cursor.fetchone()

while row:
    print(row)
    # 获取下一行记录
    row = cursor.fetchone()

# 关闭DBConnection 和 游标对象 
cursor.close()
cnxn.close()

# 当不指定ODBC时,可以用以下参数连接数据库
conn = pyodbc.connect('DRIVER={SQL Server};SERVER=localhost;DATABASE=mydatabase;UID=myusername;PWD=mypassword')

# 查询数据
with conn.cursor() as cursor:
    # 定义查询参数
    params = ('Alice'25)

    # 执行参数化查询
    cursor.execute('SELECT * FROM mytable WHERE name=? AND age=?', params)
    rows = cursor.fetchall()

    # 打印数据
    for row in rows:
        print(row)

 

2.针对特定的数据库(pymysql,pymssql, psycopg)

可以用pyodbc访问数据库的前提是需要安装odbc驱动且配置ODBC。使用特定配置的包可以绕过此配置,同时这些包会针对特定的数据库做一些优化,访问效率也比通用的pyodbc有所提升。

2.1用pymysql访问mysql

Python的PyMySQL是一个在Python 3.x版本中操作MySQL数据库的模块,它基于Python MySQLdb模块进行二次封装,使用起来更加方便,官方链接: pymysql.readthedocs.io/en/latest/u…

import pymysql

# 连接数据库
conn = pymysql.connect(
    host='localhost',
    port=3306,
    user='root',
    password='123456',
    db='test',
    charset='utf8'
)

# 创建游标对象
cursor = conn.cursor()

# 执行SQL语句
cursor.execute("SELECT * from students")

# 获取查询结果
result = cursor.fetchall()

# 输出查询结果
for row in result:
    print(row)

# 关闭游标和数据库连接
cursor.close()
conn.close()

2.2用pymssql访问sqlserver

pymssql是Python的一个第三方库,用于访问SQL Server数据库。它使用TDS(Tabular Data Stream)协议来与SQL Server进行通信,其原理是使用ODBC(Open Database Connectivity)来实现与SQL Server的数据交互。

import pymssql

# 连接数据库
conn = pymssql.connect(server='localhost', user='username', password='password', database='databasename')

# 创建游标对象
cursor = conn.cursor()

# 查询数据
cursor.execute("SELECT * FROM table")

# 遍历查询结果
for row in cursor:
    print(row)

# 关闭连接
conn.close()

pymssql只适用于Python 2.x版本,如果您在使用Python 3.x版本,可以考虑使用pymssql的fork版本--pymssql2。

2.3用psycopg访问postgreSQL

psycopg2和psycopg3都是Python中常用的PostgreSQL数据库驱动程序,它们的区别主要体现在以下几个方面:

  1. 支持Python版本不同:psycopg2支持Python 2.7到Python 3.6,而psycopg3支持Python 3.6及以上版本。
  2. 接口协议不同:psycopg2使用 libpq C库的接口协议,而psycopg3则使用 Postgres的原生协议。
  3. 性能和稳定性:psycopg3相对于psycopg2而言,具有更好的性能和更好的稳定性。

总的来说,如果你使用的是Python 3.6及以上版本,建议使用psycopg3;如果你使用的是Python 2.7到Python 3.6版本,建议使用psycopg2。

psycopg2代码用例

import psycopg2

# 连接数据库
conn = psycopg2.connect(
    host="your_host",
    database="your_database",
    user="your_username",
    password="your_password"
)
# 创建游标对象
cur = conn.cursor()

# 执行SQL查询
cur.execute("SELECT * FROM your_table")

# 获取查询结果
rows = cur.fetchall()

# 打印查询结果
for row in rows:
    print(row)

# 关闭游标和数据库连接
cur.close()
conn.close()

综上,三种包连接数据库都有相通之处,连接数据库的几个步骤:

  1. 建立连接,创建游标对象;
  2. 执行SQL,获取执行结果/提交事务;
  3. 关闭游标和数据库连接。

3.通过SQLAlchemy访问

可以使用SQLAlchemy库来进一步改善代码。SQLAlchemy是一个Python SQL工具包,可以与多种数据库进行交互,并提供了ORM(对象关系映射)功能,可以将数据库表映射为Python类,方便地进行数据操作。

输出直接是pandas的dataframe对象,对于数据分析的场景,可以直接用dataframe进行运算。

from sqlalchemy import create_engine
import pandas as pd

# 创建数据库引擎
engine = create_engine('mssql+pyodbc://myusername:mypassword@localhost/mydatabase?driver=SQL Server')

# 读取数据
df = pd.read_sql('SELECT * FROM mytable WHERE name=:name AND age=:age', engine, params={'name''Alice''age'25})

# 打印数据
print(df)