gpt4 book ai didi

python-3.x - 具有当前数据库版本设置的 'default' 方言不支持就地多行插入

转载 作者:行者123 更新时间:2023-12-03 23:18:26 27 4
gpt4 key购买 nike

我在字典列表中有数据,我试图将数据插入我的数据库然后我得到错误 sqlalchemy.exc.CompileError:具有当前数据库版本设置的“默认”方言不支持就地多行插入。

from sqlalchemy import create_engine,Table,Column,String,Integer,MetaData,ForeignKey
from sqlalchemy_utils import database_exists,create_database,drop_database
from sqlalchemy.orm import join

engine = create_engine("mysql+mysqldb://root:268454@localhost:3306/sqlalchemy")
conn = engine.connect()

if database_exists(engine.url):
drop_database(engine.url)

create_database(engine.url)

metaData = MetaData()

userTable = Table("user", metaData
, Column("Id", Integer, primary_key = True)
, Column("Name", String(25)))

orderTable = Table("order", metaData
, Column("Id", Integer, primary_key = True)
, Column("UserId", Integer, ForeignKey("user.Id"))
, Column("Desc", String(250)))

try:
metaData.create_all(engine)
except Exception as ex:
print(ex)

users = [
{"Id": 1,
"Name": "user1"},
{"Id": 2,
"Name": "user2"},
{"Id": 3,
"Name": "user3"},
{"Id": 4,
"Name": "user4"}
]

orders = [
{"Id": 1,
"UserId": 1,
"Desc": "desc1"},
{"Id": 2,
"UserId": 1,
"Desc": "desc2"},
{"Id": 3,
"UserId": 2,
"Desc": "desc3"},
{"Id": 4,
"UserId": 2,
"Desc": "desc4"},
]

sql = userTable.insert().values(users)
print(sql) #this line causes the exception

conn.execute(sql)

sql = orderTable.insert().values(orders)
print(sql)

conn.execute(sql)

sql = userTable.select()
print(sql)
returnUsers = conn.execute(sql)
print(returnUsers)

sql = orderTable.select()
print(sql)
returnOrders = conn.execute(sql)
print(returnOrders)

conn.close()

更新:没有打印(sql)它可以完美地工作。

最佳答案

如果您迭代字典列表并单独传入字典,请尝试它是否有效。您尝试使用的特殊语法并非在所有方言中都可用。

for user in users:
sql = userTable.insert().values(user)
print(sql) #this line causes the exception

conn.execute(sql)

诚然 sqlalchemy documentation声明,MySQL 后端应该支持这一点。就我个人而言,我不会依赖不可移植或非标准的东西,而是坚持每行一个插入调用,或者明确的 bulk_insert方法。

编辑关于打印声明

正如我在评论中提到的,对查询的这种表示形式调用的方法 print 不支持方言。
但是,您可以像这样检索查询的方言版本:
from sqlalchemy.dialects import mysql
print str(q.statement.compile(dialect=mysql.dialect()))

信用到期的信用: Blog post

关于python-3.x - 具有当前数据库版本设置的 'default' 方言不支持就地多行插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43658445/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com