- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 sqlalchemy 和 mysql 创建一个简单的真实数据库。我不确定我做错了什么,尽管我认为这可能与我将行添加到表中的方式有关。下面是我的模型以及创建下面所有条目的代码。
这是我遇到的错误:
2014-03-12 14:53:52,109 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
INFO:sqlalchemy.engine.base.Engine:BEGIN (implicit)
2014-03-12 14:53:52,139 INFO sqlalchemy.engine.base.Engine INSERT INTO accession_numbers (accession_number, gene) VALUES (%s, %s)
INFO:sqlalchemy.engine.base.Engine:INSERT INTO accession_numbers (accession_number, gene) VALUES (%s, %s)
2014-03-12 14:53:52,140 INFO sqlalchemy.engine.base.Engine (('AB009589', <__main__.Gene object at 0xe8ba090>), ('AB014887', <__main__.Gene object at 0xe220890>), ('AB019534', <__main__.Gene object at 0xe8baf10>), ('AB038490', <__main__.Gene object at 0xe8b8150>), ('AB046409', <__main__.Gene object at 0xe8b86d0>), ('AB051625', <__main__.Gene object at 0xe8b8c50>), ('AB051627', <__main__.Gene object at 0xe8b8ed0>), ('AB060808', <__main__.Gene object at 0xe8dd110>) ... displaying 10 of 1317 total bound parameter sets ... ('EU266531', <__main__.Gene object at 0x15093b50>), ('EU286279', <__main__.Gene object at 0x15093cd0>))
INFO:sqlalchemy.engine.base.Engine:(('AB009589', <__main__.Gene object at 0xe8ba090>), ('AB014887', <__main__.Gene object at 0xe220890>), ('AB019534', <__main__.Gene object at 0xe8baf10>), ('AB038490', <__main__.Gene object at 0xe8b8150>), ('AB046409', <__main__.Gene object at 0xe8b86d0>), ('AB051625', <__main__.Gene object at 0xe8b8c50>), ('AB051627', <__main__.Gene object at 0xe8b8ed0>), ('AB060808', <__main__.Gene object at 0xe8dd110>) ... displaying 10 of 1317 total bound parameter sets ... ('EU266531', <__main__.Gene object at 0x15093b50>), ('EU286279', <__main__.Gene object at 0x15093cd0>))
2014-03-12 14:53:52,143 INFO sqlalchemy.engine.base.Engine ROLLBACK
INFO:sqlalchemy.engine.base.Engine:ROLLBACK
---------------------------------------------------------------------------
IntegrityError Traceback (most recent call last)
<ipython-input-17-96f4786cad50> in <module>()
29 session.add(acc)
30
---> 31 session.commit()
/usr/lib64/python2.7/site-packages/sqlalchemy/orm/session.pyc in commit(self)
719 raise sa_exc.InvalidRequestError("No transaction is begun.")
720
--> 721 self.transaction.commit()
722
723 def prepare(self):
/usr/lib64/python2.7/site-packages/sqlalchemy/orm/session.pyc in commit(self)
352 self._assert_active(prepared_ok=True)
353 if self._state is not PREPARED:
--> 354 self._prepare_impl()
355
356 if self._parent is None or self.nested:
/usr/lib64/python2.7/site-packages/sqlalchemy/orm/session.pyc in _prepare_impl(self)
332 if self.session._is_clean():
333 break
--> 334 self.session.flush()
335 else:
336 raise exc.FlushError(
/usr/lib64/python2.7/site-packages/sqlalchemy/orm/session.pyc in flush(self, objects)
1822 try:
1823 self._flushing = True
-> 1824 self._flush(objects)
1825 finally:
1826 self._flushing = False
/usr/lib64/python2.7/site-packages/sqlalchemy/orm/session.pyc in _flush(self, objects)
1940 except:
1941 with util.safe_reraise():
-> 1942 transaction.rollback(_capture_exception=True)
1943
1944 def is_modified(self, instance, include_collections=True,
/usr/lib64/python2.7/site-packages/sqlalchemy/util/langhelpers.pyc in __exit__(self, type_, value, traceback)
56 exc_type, exc_value, exc_tb = self._exc_info
57 self._exc_info = None # remove potential circular references
---> 58 compat.reraise(exc_type, exc_value, exc_tb)
59 else:
60 self._exc_info = None # remove potential circular references
/usr/lib64/python2.7/site-packages/sqlalchemy/orm/session.pyc in _flush(self, objects)
1904 self._warn_on_events = True
1905 try:
-> 1906 flush_context.execute()
1907 finally:
1908 self._warn_on_events = False
/usr/lib64/python2.7/site-packages/sqlalchemy/orm/unitofwork.pyc in execute(self)
370 self.dependencies,
371 postsort_actions):
--> 372 rec.execute(self)
373
374 def finalize_flush_changes(self):
/usr/lib64/python2.7/site-packages/sqlalchemy/orm/unitofwork.pyc in execute(self, uow)
523 persistence.save_obj(self.mapper,
524 uow.states_for_mapper_hierarchy(self.mapper, False, False),
--> 525 uow
526 )
527
/usr/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyc in save_obj(base_mapper, states, uowtransaction, single)
62 _emit_insert_statements(base_mapper, uowtransaction,
63 cached_connections,
---> 64 table, insert)
65
66 _finalize_insert_update_commands(base_mapper, uowtransaction,
/usr/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.pyc in _emit_insert_statements(base_mapper, uowtransaction, cached_connections, table, insert)
539 multiparams = [rec[2] for rec in records]
540 c = cached_connections[connection].\
--> 541 execute(statement, multiparams)
542
543 for (state, state_dict, params, mapper,
/usr/lib64/python2.7/site-packages/sqlalchemy/engine/base.pyc in execute(self, object, *multiparams, **params)
660 object,
661 multiparams,
--> 662 params)
663 else:
664 raise exc.InvalidRequestError(
/usr/lib64/python2.7/site-packages/sqlalchemy/engine/base.pyc in _execute_clauseelement(self, elem, multiparams, params)
759 compiled_sql,
760 distilled_params,
--> 761 compiled_sql, distilled_params
762 )
763 if self._has_events:
/usr/lib64/python2.7/site-packages/sqlalchemy/engine/base.pyc in _execute_context(self, dialect, constructor, statement, parameters, *args)
872 parameters,
873 cursor,
--> 874 context)
875
876 if self._has_events:
/usr/lib64/python2.7/site-packages/sqlalchemy/engine/base.pyc in _handle_dbapi_exception(self, e, statement, parameters, cursor, context)
1022 self.dialect.dbapi.Error,
1023 connection_invalidated=self._is_disconnect),
-> 1024 exc_info
1025 )
1026
/usr/lib64/python2.7/site-packages/sqlalchemy/util/compat.pyc in raise_from_cause(exception, exc_info)
194 # the code line where the issue occurred
195 exc_type, exc_value, exc_tb = exc_info
--> 196 reraise(type(exception), exception, tb=exc_tb)
197
198
/usr/lib64/python2.7/site-packages/sqlalchemy/engine/base.pyc in _execute_context(self, dialect, constructor, statement, parameters, *args)
854 statement,
855 parameters,
--> 856 context)
857 elif not parameters and context.no_parameters:
858 self.dialect.do_execute_no_params(
/usr/lib64/python2.7/site-packages/sqlalchemy/connectors/mysqldb.pyc in do_executemany(self, cursor, statement, parameters, context)
58
59 def do_executemany(self, cursor, statement, parameters, context=None):
---> 60 rowcount = cursor.executemany(statement, parameters)
61 if context is not None:
62 context._rowcount = rowcount
/usr/lib64/python2.7/site-packages/MySQLdb/cursors.pyc in executemany(self, query, args)
204 r = 0
205 for a in args:
--> 206 r = r + self.execute(query, a)
207 return r
208 p = m.start(1)
/usr/lib64/python2.7/site-packages/MySQLdb/cursors.pyc in execute(self, query, args)
172 del tb
173 self.messages.append((exc, value))
--> 174 self.errorhandler(self, exc, value)
175 self._executed = query
176 if not self._defer_warnings: self._warning_check()
/usr/lib64/python2.7/site-packages/MySQLdb/connections.pyc in defaulterrorhandler(***failed resolving arguments***)
34 del cursor
35 del connection
---> 36 raise errorclass, errorvalue
37
38 re_numeric_part = re.compile(r"^(\d+)")
IntegrityError: (IntegrityError) (1452, 'Cannot add or update a child row: a foreign key constraint fails (`chromo9`.`accession_numbers`, CONSTRAINT `accession_numbers_ibfk_1` FOREIGN KEY (`gene`) REFERENCES `genes` (`gene_identifier`))') 'INSERT INTO accession_numbers (accession_number, gene) VALUES (%s, %s)' (('AB009589', <__main__.Gene object at 0xe8ba090>), ('AB014887', <__main__.Gene object at 0xe220890>), ('AB019534', <__main__.Gene object at 0xe8baf10>), ('AB038490', <__main__.Gene object at 0xe8b8150>), ('AB046409', <__main__.Gene object at 0xe8b86d0>), ('AB051625', <__main__.Gene object at 0xe8b8c50>), ('AB051627', <__main__.Gene object at 0xe8b8ed0>), ('AB060808', <__main__.Gene object at 0xe8dd110>) ... displaying 10 of 1317 total bound parameter sets ... ('EU266531', <__main__.Gene object at 0x15093b50>), ('EU286279', <__main__.Gene object at 0x15093cd0>))
我的模型:
from sqlalchemy import create_engine
from sqlalchemy import Column, Integer, String, Text
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import ForeignKey
from sqlalchemy.orm import sessionmaker
SETTINGS = {
'DB':{
'USER':'root',
'LOCATION':'localhost',
'PORT':'3306',
'DATABASE_NAME':'chromo9',
},
}
class Settings:
def __init__(self, **attrs):
for key, value in attrs.iteritems():
if type(value) is dict:
attrs[key] = Settings(**value)
self.__dict__.update(attrs)
SETTINGS = Settings(**SETTINGS)
if not hasattr(SETTINGS.DB, 'PASSWD'):
SETTINGS.DB.PASSWD = raw_input('Enter passwd for mysql user {}'.format(SETTINGS.DB.USER))
conn_string = 'mysql+mysqldb://{user}:{passwd}@{location}:{port}'.format(
user = SETTINGS.DB.USER,
passwd = SETTINGS.DB.PASSWD,
location = SETTINGS.DB.LOCATION,
port = SETTINGS.DB.PORT,
)
#engine = create_engine('sqlite:///:memory:', )#echo=True)
engine = create_engine(conn_string, echo=True)
engine.execute('CREATE DATABASE IF NOT EXISTS {}'.format(SETTINGS.DB.DATABASE_NAME))
engine.execute('USE {}'.format(SETTINGS.DB.DATABASE_NAME))
Base = declarative_base()
class Gene(Base):
__tablename__ = 'genes'
gene_identifier= Column(Integer, primary_key=True)
nucleotide_sequence = Column(Text)
chromosome_location = Column(String(8))
class Accession(Base):
__tablename__ = 'accession_numbers'
accession_number = Column(String(8), primary_key=True)
gene = Column(Integer, ForeignKey('genes.gene_identifier'))
class Exon(Base):
__tablename__ = 'exons'
id = Column(Integer, primary_key=True)
start = Column(Integer)
end = Column(Integer)
gene = Column(Integer, ForeignKey('genes.gene_identifier'))
class Protein(Base):
__tablename__ = 'proteins'
id = Column(Integer, primary_key=True)
name = Column(String(128))
sequence = Column(Text)
gene = Column(Integer, ForeignKey('genes.gene_identifier'))
Base.metadata.create_all(engine) # create the tables
创建所有对象:
Session = sessionmaker(bind=engine)
session = Session()
for record in records:
gene = Gene(gene_identifier=record.gi ,nucleotide_sequence=record.sequence ,chromosome_location=record.locus)
session.add(gene)
for feature in record.features:
if feature.key == 'CDS':
translation, name = None, None
for qualifier in feature.qualifiers:
if qualifier.key == '/translation=':
translation = qualifier.value
if qualifier.key == '/product=':
name = qualifier.value
# create protein object
protein = Protein(name=name, sequence=translation, gene=gene)
session.add(protein)
if feature.key == 'exon':
start, end = feature.location.split('..')
start, end = int(''.join([d for d in start if d.isdigit()])), int(''.join([d for d in end if d.isdigit()]))
exon = Exon(start=start,end=end,gene=gene)
session.add(exon)
for accession in record.accession:
acc = Accession(accession_number=accession, gene=gene)
session.add(acc)
session.commit()
最佳答案
有很多东西要看,所以我肯定我错过了一些东西,但由于我不确定你对你正在使用的数据库了解多少,我将从这里开始,希望它能有所帮助:
看起来您正在尝试插入引用不存在的基因的种质。那就是它提示的外键。看起来您试图在同一 session 中创建基因和加入。您可能需要在创建 Gene(以及以后更新所依赖的任何其他对象)之后调用 session.commit()。这会将 Gene 放入数据库中,然后供 Accession 引用。
这有点像瞎猜,因为我不熟悉 SQLAlchemy(也不知道什么是 Accession)。我在这里只是依靠我对 SQL 的了解。但问题肯定是在插入依赖于基因表的表中的行之前,将任何行放入基因表。
关于Python Sqlalchemy mysql "Cannot add or update a child row: a foreign key constraint fails",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22356188/
仍在习惯正则表达式中的环视,但似乎无法理解 \b(?>! key)foreign\b 要成为正确的解决方案?我试图在某些文本中找到所有外来词的实例,但不是外键或外键。 最佳答案 前瞻需要在 forei
我有一个外国表,例如: CREATE FOREIGN TABLE film ( id varchar(40) NOT NULL, title varcha
我的意思是例如我可以创建表 create table XTable ( idt int not null primary key, value nvarchar(50), idq int,
我有以下表格: 财务: PK_FinancialID FK_SchoolID 学校: PK_SchoolID 类: PK_ClassID FK_SchoolID 类(class)名 Class 和 F
我有一个旧数据库,我不能用每个实体中具有外键属性的两个实体更改它: EntityOne ForeignKey1 (pointing to EntityTwo.ForeignKey2) Enti
当我尝试运行代码时,出现此错误 Cannot add or update a child row: a foreign key constraint fails (hotel_info.results
好的,我尝试了这种从外国翻译过来的方法,它确实有效我在我的库中的 structs.lisp 文件中定义了这些,它在我所有其他依赖项之前首先加载 (cffi:defcstruct (cv-size :c
我有一个 Django 程序员的问题应该很简单,但目前我不知道如何解决。 我有这三个模型(我尽量简化): class Nations(models.Model): label = models
真的很讨厌占用别人的时间,但问题似乎并没有消失。 我考虑了 http://verysimple.com/2006/10/22/mysql-error-number-1005-cant-create-t
我需要一双新的眼睛来看看我到底做错了什么。 CREATE TABLE IF NOT EXISTS `spring_normalize`.`users` ( `username` VARCHAR(6
我正在尝试在表中添加外键约束。我的表结构是:表请购单 我想在下一张表中添加申请表的外键 申请批准 当我尝试使用以下 SQL 查询添加外键约束时: ALTER TABLE `requisition_ap
每当我尝试将数据插入“学生”表时,都会收到此错误。下面是两个表,我使用的是MySql: 学生表: | Field | Type | Null | Key | Defaul
我收到错误代码 1215:无法为子表添加外键约束。父表具有复合主键。我想使用该复合主键作为子表中的外键。请指导我。 父表 CREATE TABLE health.procedures( Spe
var state = require('./state') module.exports = function (sequelize, DataTypes) { var city = seq
我可以通过 this case 部分解决这个问题 不幸的是,Preload() 函数似乎无法在相关对象集中进行更深入的研究。 澄清一下,我有以下模型: type Room struct {
我正在使用 Laravel 6。我创建了一些迁移,但我无法让它们成功运行。这些是我的迁移。 public function up() { Schema::create('nationa
这是我的总输出: Executing SQL script in server ERROR: Error 1215: Cannot add foreign key constraint CREATE
我有 postgres 数据库,我的应用程序是使用 django 构建的,我使用 south migration 来维护数据库模式。我有以下场景: user_table与userclickstream
简单的问题。只是想知道是否可以在不需要我在 Java 代码中手动强制执行此约束的情况下完成此操作。这两个外键(一起在同一个表中)都引用另一个表,但对于每一行,它们不得指向同一个外项。 link tex
我正在为我的模型关联使用 Sails 和 Waterline,但我不确定要做什么才能修复我在尝试更新 PageChild 对象时收到的错误。 module.exports = { tableN
我是一名优秀的程序员,十分优秀!