如何使用ironpython导入mysql数据
我正在寻求帮助,寻找通过ironpython脚本将sql数据导入数据库的方法 当前我的脚本如下所示,首先运行此脚本:如何使用ironpython导入mysql数据,mysql,ironpython,Mysql,Ironpython,我正在寻求帮助,寻找通过ironpython脚本将sql数据导入数据库的方法 当前我的脚本如下所示,首先运行此脚本: import clr; import System; clr.AddReference("TCAdmin.SDK"); from TCAdmin.SDK.Misc import Random; from System import String; ThisService.Variables["MySQLUser"] = String.Format("exile_{0}",
import clr;
import System;
clr.AddReference("TCAdmin.SDK");
from TCAdmin.SDK.Misc import Random;
from System import String;
ThisService.Variables["MySQLUser"] = String.Format("exile_{0}", ThisService.ServiceId);
ThisService.Variables["MySQLPassword"] = Random.RandomString(10,True,True);
ThisService.Save();
然后,此脚本将在以下步骤后运行:
import clr;
import System;
clr.AddReference("TCAdmin.DatabaseProviders.MySql");
clr.AddReference("TCAdmin.SDK");
from TCAdmin.DatabaseProviders.MySql import MySqlManager;
from System import String;
mysql_server="localhost";
mysql_root="root";
mysql_password="Password";
with MySqlManager() as mysql:
escapeduser=mysql.PrepareSqlValue(ThisService.Variables["MySQLUser"]);
escapedpass=mysql.PrepareSqlValue(ThisService.Variables["MySQLPassword"]);
mysql.Connect(String.Format("Data Source={0};User Id={1};Password={2};Pooling=False;", mysql_server, mysql_root, mysql_password));
mysql.ExecuteNonQuery(String.Format("DROP DATABASE IF EXISTS {0};", escapeduser));
if mysql.Execute(String.Format("SELECT COUNT(*) as count FROM mysql.user WHERE user='{0}' AND host='localhost';", escapeduser)).Rows[0].Item[0] == 1 :
mysql.ExecuteNonQuery(String.Format("DROP USER {0}@localhost;", escapeduser));
mysql.ExecuteNonQuery(String.Format("CREATE DATABASE {0};", escapeduser));
mysql.ExecuteNonQuery(String.Format("GRANT ALL PRIVILEGES ON {0}.* TO '{0}'@'localhost' IDENTIFIED BY '{1}';", escapeduser, escapedpass));
mysql.ExecuteNonQuery(String.Format("USE '{0}';", escapeduser));
mysql.ExecuteNonQuery(String.Format("""CREATE TABLE IF NOT EXISTS `account` (
`uid` varchar(32) NOT NULL,
`clan_id` int(11) UNSIGNED DEFAULT NULL,
`name` varchar(64) NOT NULL,
`money` double NOT NULL DEFAULT '0',
`score` int(11) NOT NULL DEFAULT '0',
`kills` int(11) UNSIGNED NOT NULL DEFAULT '0',
`deaths` int(11) UNSIGNED NOT NULL DEFAULT '0',
`first_connect_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`last_connect_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`last_disconnect_at` datetime DEFAULT NULL,
`total_connections` int(11) UNSIGNED NOT NULL DEFAULT '1'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;""", escapeduser));
当我运行脚本时,会出现以下错误:
您的SQL语法有错误;检查与MySQL服务器版本相对应的手册,以了解第1行“放逐2”附近使用的正确语法
TCAdmin.SDK.Database.DatabaseException:您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在第1行“放逐2”附近使用的正确语法--->您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以了解在第1行“放逐_2”附近使用的正确语法---内部异常堆栈跟踪的结尾---在Microsoft.Scripting.Transparer.ThrowInstruction.Run(解释器框架)在Microsoft.Scripting.Transparer.Transparer.RunInstructions(解释器框架)在IronPython.Compiler.PythonScriptCode.RunWorker(CodeContext ctx)在IronPython.Compiler.RuntimeScriptCode.InvokeTarget(作用域)在Microsoft.Scripting.Hosting.ScriptSource.Execute在Microsoft.Scripting.Hosting(ScriptScope作用域)位于TCAdmin.SDK.Scripting.Engines.IronPythonEngine.Execute(凭据)位于TCAdmin.SDK.Scripting.ScriptEngineManager.Execute()位于TCAdmin.GameHosting.SDK.Objects.GameScript.ExecuteEventScripts(ScriptEngineManager ScriptEngineManager,ServiceEventScript,ObjectList脚本)在TCAdmin.gameshosting.Automation.automationprocesss.Ձ()在TCAdmin.gameshosting.Automation.automationprocesss.Start()在TCAdmin.TaskScheduler.ModuleApi.StepBase.Start(对象参数),因此我能够通过使用以下脚本导入实际的SQL文件来解决这个问题
import clr;
import System;
clr.AddReference("TCAdmin.DatabaseProviders.MySql");
clr.AddReference("TCAdmin.SDK");
from TCAdmin.DatabaseProviders.MySql import MySqlManager;
from System import String;
from System.IO import File, Path;
mysql_server="localhost";
mysql_root="root";
mysql_password="Password";
if not ThisService.Variables.HasValue("MySQLUser") :
Script.Exit();
backupfile=Path.Combine(ThisService.RootDirectory, "dbname.sql");
with MySqlManager() as mysql:
escapeduser=mysql.PrepareSqlValue(ThisService.Variables["MySQLUser"]);
escapedpass=mysql.PrepareSqlValue(ThisService.Variables["MySQLPassword"]);
mysql.Connect(String.Format("Data Source={0};User Id={1};Password={2};Pooling=False;", mysql_server, mysql_root, mysql_password));
mysql.ExecuteNonQuery(String.Format("DROP DATABASE IF EXISTS {0};", escapeduser));
if mysql.Execute(String.Format("SELECT * FROM mysql.user WHERE user='{0}' AND host='localhost';", escapeduser)).Rows.Count == 1 :
mysql.ExecuteNonQuery(String.Format("DROP USER {0}@localhost;", escapeduser));
mysql.ExecuteNonQuery(String.Format("CREATE DATABASE {0};", escapeduser));
mysql.ExecuteNonQuery(String.Format("GRANT ALL PRIVILEGES ON {0}.* TO '{0}'@'localhost' IDENTIFIED BY '{1}';", escapeduser, escapedpass));
if File.Exists(backupfile) :
with MySqlManager() as mysql2:
mysql2.Connect(String.Format("Data Source={0};Database={1};User Id= {1};Password={2};Pooling=False;", mysql_server, ThisService.Variables["MySQLUser"], ThisService.Variables["MySQLPassword"]));
mysql2.ImportDatabase(backupfile);
File.Delete(backupfile);