ODBC连接数据库

数据库
sql
通过ODBC连接数据库
作者

不止BI

发布于

2024年3月25日

ODBC

下载安装ODBC驱动

配置ODBC

windows打开ODBS数据源管理器

配置系统DSN,添加新数据源

选择合适的ODBC驱动

按照对应ODBC驱动提示配置数据库连接信息

连接数据库

# 如果在ODBC中已配置密码,则只需要输入前面配置的dsnname作为参数,如果没有,则需要把账号和密码也传入uid和pwd
library(DBI)
con_dsn <- dbConnect(odbc::odbc(), "dsnname", timeout = 10, encoding = "GBK")

library(DBI)
con_pwd <- dbConnect(odbc::odbc(), "dsnname",
  uid = "userid",
  pwd = "password", encoding = "GBK", timeout = 10
)

# 或直接使用连接字符串
con_str <- dbConnect(odbc::odbc(),
  .connection_string = "Driver={MySQL ODBC 9.0 Unicode Driver};server=你的IP;uid=你的数据库账号;database= 要连接的数据库;PWD=数据库密码port=端口",
  timeout = 10
)
import pyodbc


# 使用 DSN 连接
con_dsn = pyodbc.connect("DSN=dsnname;UID=userid;PWD=password;CHARSET=GBK", timeout=10)

# 使用用户名和密码连接
con_pwd = pyodbc.connect("DSN=dsnname;UID=userid;PWD=password;CHARSET=GBK", timeout=10)

查询数据

library(readr)

# 从文件读取 SQL 语句
sql_file <- read_file("sql_text.sql")

# 直接在代码中写 SQL 语句
sql_inline <- "SELECT * FROM table"

# 使用 DSN 连接查询
df_dsn <- dbGetQuery(conn = con_dsn, statement = sql_file)

# 使用用户名/密码连接查询
df_pwd <- dbGetQuery(conn = con_pwd, statement = sql_inline)
import pandas as pd

# 使用 DSN 连接查询
sql_query = "SELECT * FROM table"
df_dsn = pd.read_sql_query(sql=sql_query, con=conn_dsn)

# 使用用户名/密码连接查询
df_pwd = pd.read_sql_query(sql=sql_query, con=conn_pwd)

执行sql语句

sql_exec <- "TRUNCATE table_name"

# 使用 DSN 连接执行
dbSendQuery(conn = con_dsn, statement = sql_exec)

# 使用用户名/密码连接执行
dbSendQuery(conn = con_pwd, statement = sql_exec)
sql_exec = "DELETE FROM your_table WHERE id = 123"

# 使用 DSN 连接执行
conn_dsn.execute(sql_exec)

# 使用用户名/密码连接执行
conn_pwd.execute(sql_exec)

写入表格

library(DBI)

df <- iris

# 使用 DSN 连接写入
dbAppendTable(conn = con_dsn, name = "target_table_name", value = df)

# 使用用户名/密码连接写入
dbAppendTable(conn = con_pwd, name = "target_table_name", value = df)
df <- pd.DataFrame(iris)

# 使用 DSN 连接写入
df.to_sql("target_table_name", con = conn_dsn, if_exists = "replace", index = False)

# 使用用户名/密码连接写入
df.to_sql("target_table_name", con = conn_pwd, if_exists = "replace", index = False)

jdbc

下载JDBC驱动

R

library(RJDBC)
drv <- JDBC(
  driverClass =
    "com.mysql.jdbc.Driver",
  classPath =
    "mysql-connector-java-5.1.24.jar", # jar包路径
  identifier.quote =
    "`"
)

con_tidb_jdbc <- dbConnect(drv, "jdbc:mysql://你的IP:端口/数据库?user=账号&password=密码")

其他操作与ODBC连接一致

其他

import pandas as pd
import pymysql

# 连接数据库
connection = pymysql.connect(
    host='your_tidb_server_host',
    port=4000,
    user='your_username',
    password='your_password',
    database='your_database',
    charset='utf8mb4'
)

# 使用pandas的read_sql()函数查询数据
sql_query = "SELECT * FROM your_table"  # 替换为你的SQL查询
df = pd.read_sql(sql=sql_query, con=connection)

# 显示DataFrame内容
print(df)

# 关闭连接
connection.close()
回到顶部