我正在努力将一个Django 1.5.x应用程序容器化,该应用程序通过ODBC连接到单独服务器上的MySQL数据库:
[mysql_default]
database = DB_NAME
driver = /usr/lib64/libmyodbc5.so
server = REMOTE_DB_SERVER
user = DB_USER
password = DB_USER_PWD
port = 3306
Run Code Online (Sandbox Code Playgroud)
我能够通过端口转发和SSH连接到远程数据库,在我的本地机器(docker之外)上运行Django应用程序:
ssh -L 3307:127.0.0.1:3306 MYID@REMOTE_DB_SERVER
Run Code Online (Sandbox Code Playgroud)
我使用Centos 6.x为应用程序设置了Docker容器,但无法使MySQL连接正常工作.容器安装了MySQL并运行了mysqld.
我的docker-compose.yml文件如下所示:
version: "2"
services:
web:
build: .
image: MY_IMAGE
container_name: MY_CONTAINER
network_mode: "host"
ports:
- "3307:3306"
command: /bin/bash
Run Code Online (Sandbox Code Playgroud)
在容器运行的情况下,我可以执行以下命令(在容器外部)以在远程数据库上显示数据库:
docker exec MY_CONTAINER echo "show databases" | mysql -u DB_USER -pDB_USER_PWD -h 127.0.0.1 --port=3307
Run Code Online (Sandbox Code Playgroud)
但是从容器内部,同样的命令失败:
echo "show databases" | mysql -u DB_USER -pDB_USER_PWD -h 127.0.0.1 --port=3306
ERROR 2003 (HY000): Can't connect to MySQL …Run Code Online (Sandbox Code Playgroud) 我有这个:
$dbh = new PDO("odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=$mdbFilename", $username, $password);
$sql = "SELECT * FROM this_table";
$stmt = $dbh->query($sql);
//num of rows?
Run Code Online (Sandbox Code Playgroud)
如何获取从该SELECT语句返回的行数?
谢谢大家
我已经看到了这两个Option=3和Option=4连接字符串样品中的MySQL ODBC,但没有解释或文件.这些数字是什么意思?
我在将Ruby连接到Microsoft SQL Server时遇到了麻烦.我正在运行Mac OS X,但目标环境是Ubuntu Linux.
这是我尝试过的:
然后我将这些文件放在/usr/local/etc:
odbc.iniodbcinst.inifreetds.conf我在odbcinst.ini文件中将FreeTDS驱动程序的引用添加到我的ODBC驱动程序文件中,如下所示:
;
; odbcinst.ini
;
;
[FreeTDS]
Driver = /usr/local/lib/libtdsodbc.so
Run Code Online (Sandbox Code Playgroud)
然后我在freetds.conf文件中配置服务器,如下所示:
# Aries database server (SQL Server 2008)
[aries-db1]
host = xx.xx.xx.xx
port = 1433
tds version = 8.0
Run Code Online (Sandbox Code Playgroud)
最后我在odbc.ini文件中添加了ODBC DSN,如下所示:
[aries-db1]
Driver = FreeTDS
Description = ODBC Connection via FreeTDS
Trace = 1
Servername = aries-db1
Database = MY_DB
UID = user1
PWD …Run Code Online (Sandbox Code Playgroud) 我做了以下代码,
import pyodbc
try:
pyodbc.connect('DRIVER={%s};SERVER=%s;DATABASE=%s;UID=%s;PWD=%s' % (driver, server, database, uid, password))
except pyodbc.Error, err:
logging.warn(err)
Run Code Online (Sandbox Code Playgroud)
我得到的错误消息格式是
('HY000', "[HY000] [MySQL][ODBC 5.1 Driver]Access denied for user 'root'@'192.168.2.27' (using password: YES) (1045) (SQLDriverConnect)")
Run Code Online (Sandbox Code Playgroud)
我想只收到错误的消息部分即
Access denied for user 'root'@'192.168.2.27'(using password: YES)
Run Code Online (Sandbox Code Playgroud)
我不知道我是否可以特别注意错误,找不到驱动程序,主机关闭等等.
我也尝试捕获错误:
except pyodbc.OperationalError, err:
logging.warn(err)
except pyodbc.DataError, err:
logging.warn(err)
except pyodbc.IntegrityError, err:
logging.warn(err)
except pyodbc.ProgrammingError, err:
logging.warn(err)
except pyodbc.NotSupportedError, err:
logging.warn(err)
except pyodbc.DatabaseError, err:
logging.warn(err)
except pyodbc.Error, err:
logging.warn(err)
Run Code Online (Sandbox Code Playgroud)
但最后一个总是捕获错误.
Fruthermore我看到pyodbc.Error.message总是空的.我怎样才能在错误中得到消息.
谢谢
ODBC支持CASE WHENMS Access的子句吗?是否有其他数据库不支持该CASE WHEN条款?我在使用ODBC连接到MS Access时尝试了以下查询,但获得了异常.
SELECT (CASE WHEN (AGE > 10) THEN 1 ELSE 0 END) FROM demo
[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression '(CASE WHEN (AGE > 10) THEN 1 ELSE 0 END)'
我试图找到一种适用于大多数数据库的通用方法,以便在与ODBC连接时使用比较表达式生成(计算)新的"布尔列".实际上,MS Access支持SELECT子句中的比较,但对于其他一些数据库,则需要CASE子句.对于MS Access,SQL可以
SELECT AGE > 10 FROM demo
但在其他方面则必须如此
SELECT (CASE WHEN (AGE > 10) THEN 1 ELSE 0 END) FROM demo
我知道以下查询将从链接服务器下拉结果集:
SELECT * FROM openquery(DEVMYSQL,
'SELECT event_id, people_id, role_id, rank, last_updated FROM event_cast')
Run Code Online (Sandbox Code Playgroud)
但是,在插入时这是同样的情况吗?它会下拉结果集还是仅获取列信息?
INSERT INTO openquery(DEVMYSQL,
'SELECT event_id, people_id, role_id, rank, last_updated FROM event_cast')
Run Code Online (Sandbox Code Playgroud)
如果是前者,那么这是非常低效的.我应该限制返回的结果集,这会影响我INSERT吗?
这基本上是如何的一个问题OPENQUERY,当谈到工作SELECT和INSERT.
我感谢任何帮助.
我遇到了SQLite数据库的问题.我正在使用http://www.ch-werner.de/sqliteodbc/中的SQLite ODBC . 安装了64位版本并使用以下设置创建了ODBC:

我打开Access数据库并链接到数据源.我可以打开表,添加记录,但不能删除或编辑任何记录.有没有什么我需要修复ODBC端允许这个?我尝试删除记录时遇到的错误是:
Microsoft Access数据库引擎停止了该过程,因为您和另一个用户正在尝试同时更改相同的数据.
当我编辑记录时,我得到:
自您开始编辑以来,其他用户已更改该记录.如果保存记录,则将覆盖其他用户所做的更改.
保存记录已禁用.只能复制到剪贴板或删除更改.
我想访问Microsoft Access数据库中的数据.我有一些.accdb和.mdb文件,想要用Python读取它们.
根据我的研究,pyodbc只能在Windows平台上使用,但我在Mac OS X上工作.我是Python的新手.
另一种选择是如果我可以将数据从数据库导出到csv然后在python中使用.
任何帮助或开始将受到高度赞赏.
我想扩展Apache Drill Mongo存储插件来推送INNER JOIN.因此我想重写INNER JOIN为mongo聚合管道.
我们如何开始在Apache Drill中实现重写.
这是一个SQL示例:
SELECT *
FROM `mymongo.db`.`test` `test`
INNER JOIN `mymongo.db`.`test2` `test2`
ON (`test`.`id` = `test2`.`fk`)
WHERE `test2`.`date` = '09.05.2017'
Run Code Online (Sandbox Code Playgroud)
我已经找到了倒推的WHERE在蒙戈存储插件条款.但我仍然在努力做同样的事情INNER JOINS.构造器public class MongoPushDownInnerJoinScan extends StoragePluginOptimizerRule看起来怎么样?我必须实现哪个MongoGroupScan(AbstractGroupScan)的等价物?任何帮助将非常感谢.