![](/img/trans.png)
[英]Issue connecting to google cloud sql for postgres from cloud data fusion pipeline
[英]Issue Connecting to Mssql Instance From Google Cloud Function
我正在尝试连接到云 function 中的云 sql 中的 mssql 实例。 我已经完成了设置私有 IP、无服务器 VPC 连接器并将我的 function 连接到 VPC 的必要步骤。 我已经能够连接到 nodejs 中的实例,但 python 更适合我当前的需求。 我在日志中得到的错误是:
pyodbc.Error: ('01000', "[01000] [unixODBC][Driver Manager]Can't open lib 'ODBC Driver 17 for SQL Server'
从我读过的所有示例中,您似乎不需要导入它们或任何东西。 这是我连接和执行一个简单请求的过程。
import sqlalchemy
import pyodbc
def hello_world(request):
# connect_simple()
db = connect_tcp_socket()
a = execute_request(db)
return a
def connect_tcp_socket() -> sqlalchemy.engine.base.Engine:
db_host = 'my_private_ip'
db_user = 'my_db_user'
db_pass = 'my_db_pass'
db_name = 'my_db_name'
db_port = 'my_db_port'
connection_string = 'DRIVER={ODBC Driver 17 for SQL Server};SERVER='+db_host+';PORT='+db_port+'DATABASE='+db_name+';UID='+db_user+';PWD='+ db_pass+';Encrypt=no'
connection_url = sqlalchemy.engine.url.URL.create("mssql+pyodbc", query={"odbc_connect": connection_string})
engine = sqlalchemy.create_engine(
connection_url
)
def execute_request(db: sqlalchemy.engine.base.Engine):
print('ok')
with db.connect() as conn:
result = conn.execute('SELECT @@VERSION')
barray= []
for row in result:
barray.append(row)
return barray
I'd recommend using the Cloud SQL Python Connector to connect to Cloud SQL from Python as it will not require the ODBC driver and is much easier to use within Cloud Functions/Cloud Run.
只需将您的connect_tcp_socket
替换为以下connect_with_connector
function。
from google.cloud.sql.connector import Connector, IPTypes
import pytds
import sqlalchemy
def connect_with_connector() -> sqlalchemy.engine.base.Engine:
def getconn() -> pytds.Connection:
with Connector() as connector:
conn = connector.connect(
"project-id:region:instance-name", # Cloud SQL connection name
"pytds",
user="my-user",
password="my-password",
db="my-database",
ip_type=IPTypes.PRIVATE
)
return conn
engine = sqlalchemy.create_engine(
"mssql+pytds://localhost",
creator=getconn,
)
return engine
您可以找到 Python 连接器的代码示例,类似于您用于建立 TCP 连接的代码示例。
注意: Pytds 驱动程序在错误处理方面并不是超级棒。 如果您看到OSError: [Errno 9] Bad file descriptor
错误,这通常意味着您的数据库用户缺少适当的权限,应该从 root 用户那里授予他们必要的权限。
您的requirements.txt
应包括以下内容:
cloud-sql-python-connector
SQLAlchemy
python-tds
sqlalchemy-pytds
还有一个交互式入门Colab 笔记本,它将引导您使用 Python 连接器,而无需更改一行代码!
它使从 Cloud Functions 连接到 Cloud SQL 既简单又安全。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.