我最近改变了我的项目以使用SQLAlchemy并且我的项目运行良好,它使用了外部MySQL服务器。
现在我尝试使用SSL CA处理不同的MySQL服务器,但它没有连接。
(它确实使用MySQL Workbench连接,因此证书应该没问题)
我使用以下代码:
ssl_args = {'ssl': {'ca': ca_path}}
engine = create_engine("mysql+pymysql://<user>:<pass>@<addr>/<schema>",
connect_args=ssl_args)
我收到以下错误:
无法在&#39; \ addr \&#39;上连接到MySQL服务器([WinError 10054]远程主机强行关闭现有连接)
有什么建议吗?
答案 0 :(得分:5)
我将DBAPI更改为MySQL-Connector,并使用以下代码:
ssl_args = {'ssl_ca': ca_path}
engine = create_engine("mysql+mysqlconnector://<user>:<pass>@<addr>/<schema>",
connect_args=ssl_args)
现在它有效。
答案 1 :(得分:0)
如果仅通过ssl连接从客户端计算机进行连接(因此您无权访问证书和密钥),则可以简单地将ssl = true添加到您的uri。
答案 2 :(得分:0)
另一种解决方案是使用sqlalchemy.engine.url.URL定义URL并将其传递给create_engine。
import { Component, OnInit } from "@angular/core";
import { NavController } from "@ionic/angular";
import { Observable, of, Subject, timer } from "rxjs";
import { delay, filter, switchMap, takeUntil, tap } from "rxjs/operators";
@Component({
selector: "app-home",
templateUrl: "./home.page.html",
styleUrls: ["./home.page.scss"]
})
export class HomePage implements OnInit {
private isInPage: boolean = true;
private unsubscribe$: Subject<void> = new Subject<void>();
constructor(private navCtrl: NavController) {}
ngOnInit() {
timer(0, 10000)
.pipe(
filter(() => this.isInPage),
tap(currentTimer => {
if (currentTimer === 0) {
this.someFunctionToRunOnlyOnce();
}
}),
switchMap(() => {
return this.someAsynFunction();
}),
takeUntil(this.unsubscribe$)
)
.subscribe();
}
ionViewWillEnter() {
this.isInPage = true;
}
ionViewWillLeave() {
this.isInPage = false;
}
ngOnDestroy() {
this.unsubscribe$.next();
this.unsubscribe$.unsubscribe();
}
public openDetailsPage(): void {
this.navCtrl.navigateForward("details");
}
private someAsynFunction(): Observable<number> {
const randomNumber = Math.floor(Math.random() * 10000) + 1;
console.log("==> Running someAsynFunction method");
return of(randomNumber).pipe(delay(1000));
}
private someFunctionToRunOnlyOnce(): void {
console.log("==> Running someAsynFunctionToRunOnlyOnce method");
}
}
您可以在查询参数中包含SSL参数作为字典。
如果您使用Flask通过诸如SQLALCHEMY_DATABASE_URI之类的配置参数而不是直接使用create_engine来初始化SqlAlchemy引擎,则此方法很有用。
答案 3 :(得分:0)
官方 doc 有据可查:
import * as Flex from '@twilio/flex-ui';
let mgr = Flex.Manager.getInstance()
let roleName = mgr.workerClient.attributes.roles
if( roleName.includes( 'admin')){
flex.SideNav.Content.add(<OutboundSmsButton key="nav-outbound-sms-button"/>);
}