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)
我该如何回滚这个?
我首先直接回答我的问题:如果第二个更可靠,为什么一个人宁愿使用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 的新手。
我希望这是一个简单的,我只是找不到如何获得我想要的结果,也许我在 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)
因此,基本上通过在员工全名的开头和结尾添加一个空格,我可以捕获所有正确的记录。我没有意识到你可以填充这样的字段,但一位同事向我透露了消息!
在Java 8中,将删除JDBC-ODBC-Bridge.典型的错误是:
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver
你知道可能的替代品吗?我找到了Easysoft.但是这个桥需要一个不在Java VM内运行的附加服务器.它是类型3驱动程序而不是类型1驱动程序.还有其他选择吗?
我知道如何使用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(数据源名称)?
我的问题是我想做JDBC批量插入和检索标识列值.MS SQL驱动程序不支持此功能.有人可以指导我,如何解决这个问题?
我正在使用NetBeans,我正在努力为我的Derby数据库添加一个BOOLEAN列到我的表中.
无法执行命令:create table"APP".CLASS(TEST BOOLEAN)BOOLEAN不能用于版本10.6或10.6之前的任何版本.您需要将数据库升级到10.7或更高版本.
但是当我查看我的版本时,我发现我的版本是10.11.
可能是什么原因?
根据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
我有一个超过100万行的用户表(Oracle 11g数据库),其中包含纯文本的所有用户密码,我试图使用SHA512算法(哈希和盐)进行哈希.从下面开始是我的Java类从用户表读取所有记录,哈希并更新回用户表.
setFetchSize(1000))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) 我开发了一个小游戏,其中用户输入的文本需要发布在 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 ×6
jdbc ×5
ms-access ×2
odbc ×2
python ×2
sql ×2
sqlalchemy ×2
commit ×1
dataframe ×1
derby ×1
dsn ×1
jar ×1
jdbc-odbc ×1
mysql ×1
netbeans ×1
oracle ×1
oracle11g ×1
pandas ×1
postgresql ×1
powershell ×1
sql-server ×1
transactions ×1
ucanaccess ×1