gpt4 book ai didi

replace - SQLAlchemy - 属性错误 : 'Table' object has no attribute replace

转载 作者:行者123 更新时间:2023-12-04 04:46:14 29 4
gpt4 key购买 nike

我正在尝试从一个数据库中的表中提取模式并将其传输到另一个数据库。以下是执行此操作的函数的一部分。
Table( ... ) 时出错被称为。

功能示例:

def transfer_data(self, from_db, to_db, tables, flush_interval=1000, table_data_filters = {}):
if from_db is to_db or from_db == to_db:
raise Exception("""Usage: Can't transfer tables to and from the same database!""")

source, sengine = (from_db.new_session(), from_db.engine()) if isinstance(from_db, SessionManager) else self.__make_session(from_db)
dest, dengine = (to_db.new_session(), to_db.engine()) if isinstance(to_db, SessionManager) else self.__make_session(to_db)
meta = MetaData()
with source.no_autoflush and dest.no_autoflush:
for table_name in tables:
print 'Processing', table_name
print 'Pulling schema from source server'
# ERROR OCCURS BELOW WITH CALL TO Table
table = Table(table_name, meta, autoload=True, autoload_with=sengine)
# etc...
# etc...

错误输出:
table = Table(table_name, meta, autoload=True, autoload_with=sengine)
File "C:\Anaconda\lib\site-packages\sqlalchemy\schema.py", line 332, in __new__
table._init(name, metadata, *args, **kw)
File "C:\Anaconda\lib\site-packages\sqlalchemy\schema.py", line 396, in _init
self._autoload(metadata, autoload_with, include_columns)
File "C:\Anaconda\lib\site-packages\sqlalchemy\schema.py", line 413, in _autoload
self, include_columns, exclude_columns
File "C:\Anaconda\lib\site-packages\sqlalchemy\engine\base.py", line 1595, in run_callable
return conn.run_callable(callable_, *args, **kwargs)
File "C:\Anaconda\lib\site-packages\sqlalchemy\engine\base.py", line 1118, in run_callable
return callable_(self, *args, **kwargs)
File "C:\Anaconda\lib\site-packages\sqlalchemy\engine\default.py", line 262, in reflecttable
return insp.reflecttable(table, include_columns, exclude_columns)
File "C:\Anaconda\lib\site-packages\sqlalchemy\engine\reflection.py", line 397, in reflecttable
for col_d in self.get_columns(table_name, schema, **tblkw):
File "C:\Anaconda\lib\site-packages\sqlalchemy\engine\reflection.py", line 254, in get_columns
**kw)
File "<string>", line 1, in <lambda>
File "C:\Anaconda\lib\site-packages\sqlalchemy\engine\reflection.py", line 49, in cache
ret = fn(self, con, *args, **kw)
File "C:\Anaconda\lib\site-packages\sqlalchemy\dialects\sqlite\base.py", line 779, in get_columns
qtable = quote(table_name)
File "C:\Anaconda\lib\site-packages\sqlalchemy\sql\compiler.py", line 2350, in quote_identifier
self._escape_identifier(value) + \
File "C:\Anaconda\lib\site-packages\sqlalchemy\sql\compiler.py", line 2331, in _escape_identifier
return value.replace(self.escape_quote, self.escape_to_quote)
AttributeError: 'Table' object has no attribute 'replace'

观察:

我认为这与 unicode(即 basestring)以及 sql 编译器如何处理它有关,因为 unicode 具有替换功能。如果值的类型表比我想象的取决于数据库模式的编码(在我的情况下是 unicode),则表通过类中的一些动态混合或通过其他一些 oop 机制/设计模式成为一种 unicode,其中 replace 是隐式调用或在某处重新定义的继承属性/操作。

源代码链接: https://bitbucket.org/shaung/sqlalchemy/src/b0a77b7e42f1/lib/sqlalchemy/sql/compiler.py

文档:
http://docs.sqlalchemy.org/en/rel_0_8/core/schema.html#metadata-reflection

任何帮助将不胜感激。
- 我的开发环境使用 Anaconda 1.6.2
- 我在数据库后端使用 postgres 但切换到 sqlite
因为数据库很小。
- SQL Alchemy 模型使用声明式语法,因此 Alchemy 使用反射
- Windows 7,64 位(在 Ubuntu 上)

最佳答案

Table() 发生此错误需要字符串类型的表名(因此可以访问替换函数),而正如错误所示,它是 Table对象不要与实际 Table() 混淆误导诊断的构造函数。

正确命名变量或事先了解从外部传入的内容并相应地按照约定进行编码的类(class)。

有兴趣的也可以使用:meta.reflect(bind=sengine)然后稍后使用... table = meta.tables[ name_of_your_table ]
指示问题的堆栈跟踪是这样的:

File "C:\Anaconda\lib\site-packages\sqlalchemy\dialects\sqlite\base.py", line 779, in get_columns qtable = quote(table_name)

关于replace - SQLAlchemy - 属性错误 : 'Table' object has no attribute replace,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18133577/

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