小编Gor*_*son的帖子

如何在 SQLAlchemy 中回滚 python 中的 dataframe.to_sql?

engine = create_engine('postgresql://username:password@host:5432/database')
transactions.to_sql('transactions', engine,if_exists='append',index=False,method='multi')
Run Code Online (Sandbox Code Playgroud)

我该如何回滚这个?

python postgresql sqlalchemy dataframe pandas

6
推荐指数
1
解决办法
7866
查看次数

engine.begin() 和 engine.connect() 有什么区别?

我首先直接回答我的问题:如果第二个更可靠,为什么一个人宁愿使用engine.connect()而不是使用?engine.begin()那么,为什么它仍然出现在 SQLAlchemy 的教程页面以及 stackoverflow 中的各处?表现?

为什么engine.connect()工作如此不一致?是自动提交的问题吗?

我的背景故事是,我刚刚解决了一个问题。普通的 SQL 查询,例如SELECT,CREATE TABLE和 ,DELETE在使用 时可以完美地工作engine.connect()。不过,使用起来MERGE会非常不一致。有时提交,有时阻止其他查询,有时什么也不做。这里推荐用于engine.begin()查询MERGE

所以我替换了以下代码:

with engine.connect() as connection:
    connection.execute('MERGE Table1 USING Table2 ON .....')
Run Code Online (Sandbox Code Playgroud)

经过

with engine.begin() as connection:
    connection.execute('MERGE Table1 USING Table2 ON .....')
Run Code Online (Sandbox Code Playgroud)

现在一切都很完美。SELECT包括、CREATE TABLE和的查询DELETE。在SQLAlchemy 文档中,它说第二个选项使用带有事务提交的事务,但其范围也with engine.connect()执行自动提交。抱歉,我是 SQL 的新手。

python transactions sqlalchemy commit

6
推荐指数
1
解决办法
4024
查看次数

Access 2010 SQL 查询仅在完整单词的字符串中查找部分匹配

我希望这是一个简单的,我只是找不到如何获得我想要的结果,也许我在 SQL 中使用了错误的关键字?

我正在搜索包含全名字段的员工表,该字段可以是“Sam”或“Evans 先生”或“Sam Evans 先生”

我正在尝试查找与另一个包含名称字段的名称表的部分匹配 - 这通常是一个短名称,例如“Sam”或“Evans”,但也可能是“Sam Evans”

我尝试过,带和不带 * 如下

SELECT tblEmployee.FullName, tblNames.Name
FROM tblEmployee, tblNames
WHERE tblEmployee.FullName Like "*" & tblNames.Name & "*"
Run Code Online (Sandbox Code Playgroud)

除了我想要的结果之外,此查询还可以返回我不想要的“Mr. Samson”的员工全名。我只想查看包含完整单词“Sam”的结果,而不是字符串中单词的一部分包含 Sam 的全名。所以我想见萨姆·埃文斯先生、萨姆·史密斯先生和莎莉·埃文斯女士等。

我希望这是有道理的。非常感谢您的帮助

编辑-解决方案

我已经解决了这个问题 - 只是发布以防它可以帮助任何有类似问题的人。

WHERE " " & tblEmployee.FullName & " " Like "* " & tblNames.Name & " *"
Run Code Online (Sandbox Code Playgroud)

因此,基本上通过在员工全名的开头和结尾添加一个空格,我可以捕获所有正确的记录。我没有意识到你可以填充这样的字段,但一位同事向我透露了消息!

sql ms-access ms-access-2010

5
推荐指数
1
解决办法
8万
查看次数

JDBC-ODBC Bridge的替换

在Java 8中,将删除JDBC-ODBC-Bridge.典型的错误是:

java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver

你知道可能的替代品吗?我找到了Easysoft.但是这个桥需要一个不在Java VM内运行的附加服务器.它是类型3驱动程序而不是类型1驱动程序.还有其他选择吗?

java odbc jdbc jdbc-odbc

5
推荐指数
1
解决办法
2478
查看次数

Powershell使用ODBC DSN而不是连接字符串从数据库读取

我知道如何使用connectionstring从数据库中读取值,即

建立要读取的数据库连接

$conn = New-Object System.Data.SqlClient.SqlConnection

$conn.ConnectionString = "Server=10.10.10.10;Initial Catalog=database_name;User Id=$username;Password=$password;"

$SQL = "..."

$conn.Open()

# Create and execute the SQL Query

$cmd = New-Object System.Data.SqlClient.SqlCommand($sql,$conn)

$count=0
do{
    try{
        $rdr = $cmd.ExecuteReader()



        while ($rdr.read()){
            $sql_output += ,@($rdr.GetValue(0), $rdr.GetValue(1))
            $count=$count + 1
        }
        $transactionComplete = $true

    }
    catch{
        $transactionComplete = $false
    }
}until ($transactionComplete)



# Close the database connection

$conn.Close()
Run Code Online (Sandbox Code Playgroud)

如何用ODBC完成同样的事情,即我在服务器上设置了DSN(数据源名称)?

powershell odbc dsn

5
推荐指数
2
解决办法
3万
查看次数

JDBC驱动程序不支持批量更新并检索标识列.为什么?

我的问题是我想做JDBC批量插入和检索标识列值.MS SQL驱动程序不支持此功能.有人可以指导我,如何解决这个问题?

java sql-server jdbc

5
推荐指数
1
解决办法
1393
查看次数

无法将BOOLEAN列添加到Derby数据库中的表

我正在使用NetBeans,我正在努力为我的Derby数据库添加一个BOOLEAN列到我的表中.

无法执行命令:create table"APP".CLASS(TEST BOOLEAN)BOOLEAN不能用于版本10.6或10.6之前的任何版本.您需要将数据库升级到10.7或更高版本.

但是当我查看我的版本时,我发现我的版本是10.11.

可能是什么原因?

java sql jdbc derby

5
推荐指数
1
解决办法
1316
查看次数

使用 JDBC 客户端获取 MySQL 的 UNSIGNED BIGINT 问题

根据MySQL 文档Unsinged Bigint的最大值= 18446744073709551615

我在未标记的 Bigint 列中插入了一个值 9223372036854776900(远低于 max limit)。

没有显示错误。

当我尝试通过 JDBC 客户端以编程方式访问它时,出现异常:

com.mysql.jdbc.exceptions.jdbc4.MySQLDataException: '10' 列中的 '9223372036854776900' 超出数据类型 BIGINT 的有效范围。 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.reflect. .newInstance(Constructor.java:422) 在 com.mysql.jdbc.Util.handleNewInstance(Util.java:411) 在 com.mysql.jdbc.Util.getInstance(Util.java:386) 在 com.mysql.jdbc。 SQLError.createSQLException(SQLError.java:1026) 在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987) 在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982) 在 com.mysql.jdbc .SQLError.createSQLException(SQLError.java:927) 在 com.mysql.jdbc.ResultSetImpl.throwRangeException(ResultSetImpl.java:7964) 在 com.mysql.jdbc.ResultSetImpl.parseLongAsDouble(ResultSetImpl.java:7248) 在 com.mysql.jdbc.ResultSetImpl.getLong(ResultSetImpl.java:2946) 在 com.mysql.jdbc.ResultSetImpl.getLong(ResultSetImpl.java) :2911)


MySQL 版本:5.5.41-0ubuntu0.14.04.1

java mysql jdbc

5
推荐指数
1
解决办法
3330
查看次数

通过JDBC在Oracle中选择和更新一百万行的性能很差

我有一个超过100万行的用户表(Oracle 11g数据库),其中包含纯文本的所有用户密码,我试图使用SHA512算法(哈希和盐)进行哈希.从下面开始是我的Java类从用户表读取所有记录,哈希并更新回用户表.

  • 我正在为SELECTUPDATE查询使用预准备语句
  • 我已将准备好的语句提取大小设置为1000(setFetchSize(1000))
  • 我已将auto commit属性设置为false
  • 使用批处理方法进行批量更新
try {
    ps = con.prepareStatement("update user set password=? where ID=?");
    psSel = con.prepareStatement("select ID, password from user");
    psSel.setFetchSize(1000);
    rs = psSel.executeQuery();
    String hashPassword = null;
    while (rs.next()) {
        long id = rs.getLong(1);
        String pwd = rs.getString(2);
        hashPassword = <<CALL TO PASSWORD HASHING UTIL>>;
        ps.setString(1, hashPassword);
        ps.setLong(2, id);
        ps.addBatch();

      //Every 5000 records update and commit
        if(++count % batchSize == 0) {
            ps.executeBatch();
            con.commit();
        }

    }
    ps.executeBatch();
    con.commit();
} …
Run Code Online (Sandbox Code Playgroud)

java oracle jdbc oracle11g batch-processing

5
推荐指数
1
解决办法
1166
查看次数

从 JAR 运行时“找不到合适的驱动程序”

我开发了一个小游戏,其中用户输入的文本需要发布在 MS Access 数据库中。

它在 NetBeans 中一切正常,但是每当我从 JAR 文件(最终需要交给我的客户)访问它时,它都不会向数据库发布任何内容。事实上,它返回以下错误:

java.sql.SQLException: No suitable driver found for jdbc:ucanaccess://C:\Users\Paul\Desktop\Spelli\RispostiDB.mdb
Run Code Online (Sandbox Code Playgroud)

这是相关代码:

public void postAnsDB()
    {
       String tableName = "Form"+studentGroup +"_"+studentSurname+"_"+studentName+"";

       answerModifier();

       try{

                String strurl="jdbc:ucanaccess://C:\\Users\\Paul\\Desktop\\Spelli\\RispostiDB.mdb";
                Connection conn=DriverManager.getConnection(strurl, "", "");
                Statement stmt=conn.createStatement();

                //Post Student Details to DB 

                String post = "INSERT INTO "+tableName+"(ID, responses, Correct_Response, Valid_Invalid, Marks) VALUES ('"+ansID+"', '"+answer+"', '"+correct+"', '"+valid+"', '"+marks+"');";

                stmt.executeUpdate(post);
            }
        catch(Exception e)
        {
            System.out.println("Exception found in postAnsDB: "+e);
        }
    }
Run Code Online (Sandbox Code Playgroud)

java ms-access netbeans jar ucanaccess

5
推荐指数
1
解决办法
2430
查看次数